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

时间:2012-06-28 19:41:34

标签: c# .net xml

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

VB6代码(这很好用):

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

C#代码(抛出错误'john'是一个意外的标记)

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

这是抛出错误的行的示例:'Cliff'是一个意外的令牌。期待空白

<rs:data>
<z:row ID="1234" ENRODATE="2010-11-12" LastName="Van "Cliff" Anderson" FirstName="Mark" GENDER="MALE"/>
</rs:data>

我知道上面的内容不是有效的XML,但是VB6接受了这个并没有问题。无论如何要处理这样的问题吗?

2 个答案:

答案 0 :(得分:2)

您在Cliff周围有额外的引号导致无效的XML语法

  

LastName =“Van”Cliff“Anderson”

显然VB6解析器在某种程度上宽容了这一点。您需要删除引号或properly escape them

答案 1 :(得分:1)

要解决此问题,您必须分析XML。

LastName="Van "Cliff" Anderson" - 是无效的,因为有“char,结束LastName。 你有LastName =“Van”,你有一些无效的Cliff“Anderson”。

要解决此问题,您必须找到此属性的开头和此属性的结尾 LastName =(start)“Van”Cliff“Anderson”(结束)。

您必须将从VB6生成的XML更改为不使用属性,但使用新的XML元素<LastName>Van "Cliff" Anderson"<\LastName>。如果您无法更改VB6的输出,则必须在执行xmlDoc .Load(XMLfilename);之前手动进行更改。

结果XML:

 <z:row ID="1234" ENRODATE="2010-11-12" FirstName="Mark" GENDER="MALE">
     <LastName>Van "Cliff" Anderson<\LastName>
 <\z:row>