我正在尝试使用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接受了这个并没有问题。无论如何要处理这样的问题吗?
答案 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>