C#如何解析非标准xml

本文关键字:xml 非标准 何解析 | 更新日期: 2023-09-27 18:23:58

我有许多需要解析的长文档。文档格式类似于XML,但实际上不是XML。

这里有一个例子:

<DOC>
    <TEXT>it's the content P&G</TEXT>
</DOC> 
<DOC>
    <TEXT>it's antoher</TEXT>
</DOC>

注意,有多个根标记-<DOC>,实体&在xml中应该是&amp;

因此,上面的文件不是一个标准的xml。

我可以使用XmlDocument来解析文件吗?还是应该编写自己的解析器?

C#如何解析非标准xml

您所说的有些不正确——这"不是标准的XML"。该文档是而不是XML。时期

不能使用XmlDocument或任何其他XML解析器将其解析为完整的文档。

在尝试使用XML解析器进行解析之前,您需要确保您拥有有效的XML。

因此,在这种情况下,要么在根元素中扭曲文档,要么将其分解为多个文档。在任何一种情况下,您都需要确保特殊字符编码正确(引号、符号等)

oakio的答案让您将文档视为XML片段,但这对无效内容(如未标记的符号)仍然没有帮助。

正如@Oded所说,这不是一个XML文档,只是一些文本。

然而,通过一些预解析,您可能能够转换它:

在一个新的根节点中包装整个东西:

<DOCS>
    <DOC>
        <TEXT>it's the content P&G</TEXT>
    </DOC> 
    <DOC>
        <TEXT>it's antoher</TEXT>
    </DOC>
<DOCS>

并搜索不允许的字符并替换为它们的实体(例如&apos;&amp;)。

正如评论中所指出的,您应该首先替换&,以避免双重编码(即以&apos;amp;结束)

不过,您可能必须通过字符串操作来实现这一点,这取决于您从哪里获取数据。

是的,但您应该设置XmlReaderSettings.ConformanceLevel:

XmlReaderSettings settings = new XmlReaderSettings()
{
    ConformanceLevel = ConformanceLevel.Fragment
};
using (XmlReader reader = XmlReader.Create(stream, settings))
{
    //TODO: read here
}

更多信息:http://msdn.microsoft.com/en-us/library/system.xml.xmlreadersettings.conformancelevel.aspx)