gpt4 book ai didi

c# - XML 解析器,多根

转载 作者:数据小太阳 更新时间:2023-10-29 02:52:05 24 4
gpt4 key购买 nike

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

<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 工具都无法处理它。

一个异常(exception)是 XmlReader .查找 XmlReaderSettings.ConformanceLevel 在 MSDN 中。如果将其设置为 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
}
}
}
}

关于c# - XML 解析器,多根,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7199047/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com