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中应该是&
。
因此,上面的文件不是一个标准的xml。
我可以使用XmlDocument
来解析文件吗?还是应该编写自己的解析器?
您所说的有些不正确——这"不是标准的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>
并搜索不允许的字符并替换为它们的实体(例如'
和&
)。
正如评论中所指出的,您应该首先替换&
,以避免双重编码(即以'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)