尝试加载XML时出现未定义的错误

时间:2012-11-29 09:40:39

标签: delphi delphi-7

我有一个400kb的大文件。

当我尝试使用以下方法加载它时:

  • IXMLDocument的LoadXMLData或
  • CreateOLEObject('MSXML2.DOMDocument.4.0')'加载方法

我在两种方法中都出现了Undefined错误。 我把文件粘贴到xml验证网页上,它确定了......

我还能做什么?

顺便说一句,元素中的属性是否有最大长度?

修改

似乎无法加载长属性... 我在xml的属性值...

中有另一个xml的一部分
An error pops up: Undefined error. Line: 1 (here is the begining of the xml)
Class of the exception is: EDOMParseError

一般来说,我想得到这样的东西:

<doc type="X223">
  <params id_param="51" value="XML_1" />
  <params id_param="52" value="XML_2" />
  <params id_param="53" value="XML_3" />
</doc>

1 个答案:

答案 0 :(得分:2)

如果您可以更改架构,请将内部XML文件存储到CDATA section,如果没有,请尝试考虑以下内容。

Parser对元素属性值的失败很可能是由于您尝试存储的XML文件中包含的引号字符。例如,请考虑以下情况:

<params id_param="51" value="<innerxmlattributevalue="value">"/>

正如您所看到的,您可能会将解析器与该内部XML中的引用char混淆,以便它可以将以上行作为:

<params id_param="51" value="<innerxmlattributevalue="
value">"/>     <-- here is expected to be another attribute or closing bracket

当您想要保留当前架构时,最简单的方法是转义内部XML文件的所有引用字符。

RFC 2629规范(由我强调):

  

确保引用所有属性值,例如"<example name='value'>",如果该值包含其中一个引号字符,   然后使用另一个引用该值,例如"<example name='"'>",   如果值包含两个引号字符,则使用其中一个引用该值,并替换该字符的出现位置   具有'&apos;'(撇号)或"&quot;"的属性值   (引用),例如"<example name='"&apos;"'>"