使用非法字符解析XML-在VB6中正常加载

14 浏览
0 Comments

使用非法字符解析XML-在VB6中正常加载

我正在尝试将由VB6应用程序使用ADODB生成的XML文件加载到.Net应用程序中。其中一些XML文件包含无效字符,在.Net端引发错误,但通过原始的VB6应用程序可以完美加载。例如:

VB6代码(正常运行):

Dim xmlDoc As MSXML.DOMDocument
xmlDoc.Load(XMLfilename)

C#代码(引发错误“john”是意外的令牌):

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(XMLfilename);

这是一个引发错误的行的示例:“Cliff”是意外的令牌。期望空格




我确实理解上述内容不是有效的XML,但VB6可以毫无问题地接受它。有没有办法处理这样的问题?

0
0 Comments

问题的原因是XML中存在非法字符,即 " 字符,它结束了 LastName 属性。在 LastName = "Van " 中,后面的 Cliff" Anderson" 是无效的。要解决这个问题,你必须找到该属性的开始和结束位置,然后改变XML生成的方式,不使用属性,而是使用新的XML元素 Van "Cliff" Anderson。如果无法改变VB6的输出,你需要在执行 xmlDoc.Load(XMLfilename) 之前手动进行更改。

解决方法是将 LastName 从属性改为元素,即 Van "Cliff" Anderson 。你可以在VB6中进行这个更改,或者在调用 xmlDoc.Load 之前进行更改。

XML属性不能包含标记,包括 CDATA。请参考 stackoverflow.com/questions/1289524。所以使用 xmlDoc 的唯一方法是将 LastName 从属性改为元素。

以上是问题的出现原因和解决方法。

0