【发布时间】:2012-07-19 07:03:31
【问题描述】:
我有一个文本流,其中包含任意纯文本和格式良好的 xml 元素的片段。如何阅读它并仅提取 xml 元素? ConformanceLevel 设置为 Fragment 的 XmlReader 在遇到纯文本时仍会引发异常,对于它来说这是格式错误的 xml。
有什么想法吗?谢谢
到目前为止,这是我的代码:
XmlReaderSettings settings = new XmlReaderSettings();
settings.ConformanceLevel = ConformanceLevel.Fragment;
using (XmlReader reader = XmlReader.Create(stream, settings))
while (!reader.EOF)
{
reader.MoveToContent();
XmlDocument doc = new XmlDocument();
doc.Load(reader.ReadSubtree());
reader.ReadEndElement();
}
这是一个示例流内容,顺便说一下,我无法控制它:
Found two objects:
Object a
<object>
<name>a</name>
<description></description>
</object>
Object b
<object>
<name>b</name>
<description></description>
</object>
【问题讨论】:
-
这不是 XML,如果你有纯文本的话。不要尝试将其解析为 Xml。您能否更准确地描述源的格式是什么?也许 HtmlAgilityPack 可以帮助你,它可以解析 Html,它是节点和纯文本的混合。
-
我知道不是,否则这会容易得多!我添加了一个示例流内容(不知道如何在这里关闭颜色突出显示.. 抱歉)
-
对于语法高亮,您可以使用
<!-- language: lang-html -->强制语言(请参阅帮助更多信息)。关于源流,您应该尝试 HtmlAgility 包。或者您是否有可靠的方法来了解什么是纯文本和什么是 xml(类似于已知模式:1 个文本、1 个 xml 节点、1 个文本、1 个 xml 节点等) -
只需将整个内容包含在标签中,它就是 xml。引用 W3C XML 1.0 “当该类型的元素可能包含字符数据时,该元素类型具有混合内容,可选地穿插有子元素。”