我下面有用于处理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将返回
一个新的XML阅读器实例设置为ReadState.Initial。调用读取
方法将新读取器放置在之前的当前节点上
对ReadSubtree方法的调用。
这就是为什么您的新阅读器仍位于初始位置的原因。下一个Read()调用会将其放置在父阅读器所在的Operation处。
如果您知道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/