gpt4 book ai didi

c# - XmlReader.ReadSubTree() 总是返回 NONE

转载 作者:行者123 更新时间:2023-11-30 22:02:14 29 4
gpt4 key购买 nike

我有下面用于处理 XML 文件的代码,xml 格式为:

<?xml version="1.0" encoding="UTF-8"?>
<Operation>
<A>
<First>F</First>
<Second>S</Second>
</A>
<B>
<Third>T</Third>
</B>
</Operation>

读取子树的代码是:

XmlReader reader = XmlReader.Create(strReader, settings);
String name = reader.Name;
if (name.ToLower().Equals("operation"))
{
XmlReader read = reader.ReadSubtree();
Console.WriteLine("Start is {0}", read.Name);
}

但是函数 reader.ReadSubTree() 总是返回 NONE,而不是子树。

这里可能出了什么问题?

最佳答案

根据 MSDN,ReadSubTree 将返回

A new XML reader instance set to ReadState.Initial. Calling the Read method positions the new reader on the node that was current before the call to the ReadSubtree method.

这就是为什么您的新阅读器仍处于初始位置的原因。下一个 Read() 调用会将其放置在父读取器所在的操作位置。

如果您知道 xml 中的名称,则可以使用 ReadToFollowing(nameOfNode) 直接读取该节点。或者在子树读取器上调用 Read 方法,直到到达所需的节点。请记住,保留的空格也是元素,因此它也会遍历这些空格。因此,一种选择是在创建阅读器时使用 XMLReaderSettings 并将 IgnoreWhiteSpace 属性设置为 true,这样它只会为您提供元素(xml 元素、声明、注释等)

请参阅此 MSDN 链接:

http://msdn.microsoft.com/en-us/library/system.xml.xmlreader.readsubtree(v=vs.110).aspx

编辑:

如果您想以任何顺序遍历元素,您也可以使用 XElement,因为 XMLReader 是仅向前的。

XElement operationReader = XElement.Load(strReader);

//You can use this collection to do your stuff. It will give you child of operation element
IEnumerable<XElement> foo = operationReader.Elements();

进一步阅读 XElement on MSDN

关于c# - XmlReader.ReadSubTree() 总是返回 NONE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27030710/

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