c# – XML解析器,多个根

这是输入字符串的一部分,我不能修改它,它总是以这种方式(通过共享内存),但我可以修改后,我把它放入一个字符串当然:

<sys><id>SCPUCLK</id><label>CPU Clock</label><value>2930</value></sys><sys><id>SCPUMUL</id><label>CPU Multiplier</label><value>11.0</value></sys><sys><id>SCPUFSB</id><label>CPU FSB</label><value>266</value></sys>

我用两个都读过它:

        String.Concat(
            XElement.Parse(encoding.GetString(bytes))
                .Descendants("value")
                .Select(v => v.Value));

和:

    XmlDocument document = new XmlDocument();
    document.LoadXml(encoding.GetString(bytes));
    XmlNode node = document.DocumentElement.SelectSingleNode("//value");
    Console.WriteLine("node = " + node);

但是他们跑步时都有错误;输入有多个根(有多个根元素引用),我不想分割字符串.

他们以任何方式读取字符串取值< value>之间的值和< / value>没有将字符串吐入多个输入?

这不是一个格式良好的XML文档,因此大多数XML工具都无法处理它.

XmlReader是一个例外.在MSDN中查找XmlReaderSettings.ConformanceLevel.如果将其设置为ConformanceLevel.Fragment,则可以使用这些设置创建XmlReader,并使用它从没有顶级元素的流中读取元素.

您必须编写使用XmlReader.Read()执行此操作的代码 – 您不能只将它提供给XmlDocument(它确实需要有一个顶级元素).

例如.,

var readerSettings = new XmlReaderSettings { ConformanceLevel = ConformanceLevel.Fragment };
using (var reader = XmlReader.Create(stream, readerSettings))
{
    while (reader.Read())
    {
        using (var fragmentReader = reader.ReadSubtree())
        {
            if (fragmentReader.Read())
            {
                var fragment = XNode.ReadFrom(fragmentReader) as XElement;

                // do something with fragment
            }
        }
    }
}
https://stackoverflow.com/questions/7199047/xml-parser-multiple-roots

转载注明原文:c# – XML解析器,多个根