C#如何解析非标准的xml
我有很多需要解析的长文档。文档格式与XML相似,但实际上不是xml。C#如何解析非标准的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的answer通过将文档视为XML片段来帮助您,但这仍然无助于无效内容,例如未转义的&符号。
是的,但你应该设置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)
由于@Oded说,这不是一个XML文档 - 只是一些文字。
然而,随着一些预解析你也许可以将它转换:
裹在一个新的根节点整个事情:
<DOCS>
<DOC>
<TEXT>it's the content P&G</TEXT>
</DOC>
<DOC>
<TEXT>it's antoher</TEXT>
</DOC>
<DOCS>
和搜索不允许的字符,并与他们的实体取代(例如'
和&
)。
正如在评论中指出,应更换&
第一,以避免双重编码(即'amp;
结束了)
您可能必须通过字符串操作要做到这一点,虽然,这取决于你在哪里得到数据来自。
唯一的问题是字符串替换是双重编码(特别是当用'&'替换'&'时,这就是为什么它应该是_first_替换)。 – Oded
会用&替换&,并用包装整个字符串... 就够了吗?还是有更多? –
由于它不是XML,因此您将无法使用XML解析器。你会想要决定它到底是什么,然后使用解析器来解决这个问题。 –
我将会残酷地移除“XML”标签,因为这是一个关于如何解析某种非XML的语言的问题。 –