我有一个文本流,其中包含任意纯文本和格式正确的 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>
最佳答案
假设这是一个 hack,如果你用一个“假的”xml 根节点包装你的混合文档,你应该能够做你需要的事情,只获取类型元素的节点(即跳过文本节点)根元素的子元素:
using System;
using System.Linq;
using System.Xml;
static class Program {
static void Main(string[] args) {
string mixed = @"
Found two objects:
Object a
<object>
<name>a</name>
<description></description>
</object>
Object b
<object>
<name>b</name>
<description></description>
</object>
";
string xml = "<FOO>" + mixed + "</FOO>";
XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);
var xmlFragments = from XmlNode node in doc.FirstChild.ChildNodes
where node.NodeType == XmlNodeType.Element
select node;
foreach (var fragment in xmlFragments) {
Console.WriteLine(fragment.OuterXml);
}
}
}
关于c# - 从混合了 XML 和纯文本的流中读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11555534/