从混合了XML和纯文本的流中读取



我有一个文本流,它包含任意纯文本和格式良好的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根节点包装你的混合文档,你应该能够做你需要做的事情,只得到根元素的子元素中类型元素的节点(即跳过文本节点):

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);
        }
    }
}

相关内容

  • 没有找到相关文章

最新更新