我有一个稍微不好的XML,我试图在.NET中解析。其他解析器可以使用相同的XML文件 - 也就是说,它们更容忍用户错误。
XML看起来像这样:
<?xml version="1.0" encoding="UTF-8"?>
<kml>
<Document id="12345">
<name>My name</name>
<description>My Description</description>
<myns:author>
<myns:name>My Name</myns:name>
</myns:author>
</Document>
</kml>
我像这样加载它:
XmlDocument doc = new XmlDocument();
doc.Load(myFilePath);
这第二行正确地引发了一个例外:
'myns' is an undeclared prefix. Line 6, position 4.
从应用程序的角度来看,我们主要是作为另一个能够处理这个稍微错误的XML文件的应用程序的管道。我们不想拒绝此第三方应用程序能够处理的XML。
有没有办法禁用或修改.NET XML Parser的严格性?
答案 0 :(得分:6)
有没有办法禁用或修改.NET XML Parser的严格性?
模式验证和类似的东西在某种程度上是可选的,但这只是无效的XML。 XML解析器通常 这个严格,应该是。下游应用程序能够处理这个事实这一事实本身就是IMO的一个令人担忧的迹象。
选项:
myns
名称空间前缀未声明的问题,您可以通过在根元素中声明它来解决这个问题。您可能希望逐行加载文件,只需更改第二个(根XML声明)答案 1 :(得分:2)
符合条件的XML处理器(包括.NET API)无法区分良构度,但“轻微”。输入是well-formed,或者不是。
根据您对文档的处理方式,您可以使用不同的选项进行处理,但所有选项都需要进行某种修改,或者System.Xml
并且公司在这里没用。
答案 2 :(得分:2)
令人惊讶的是,所有以前的答案都是错误的。
您的文档是格式良好的XML,但它不是名称空间良好的XML。这意味着它符合XML建议,但不符合XML中的命名空间建议。这意味着如果您可以找到允许关闭命名空间处理的解析器,您将能够解析它。我不知道Microsoft XML解析器是否有这样的选项,但我在这里看不到:
http://msdn.microsoft.com/en-US/library/9khb6435(v=vs.80).aspx