[英]How to get depth of current XML-node with C# and XMLReader
我嘗試使用Reader.Depth,但該函數返回完全錯誤的數字。 XML文件非常巨大,因此這里只是一個小例子:
Node1
Node1.2
Node1.2.1
Node1.2.1.1
...........
Node1.2.2
Node2.2
Noce2
你明白了。
那么如何獲得每個節點的真實深度? Reader.depth不能正常工作,無論我在哪個節點上使用它,它始終返回“ 2”。
這是代碼段:
while (reader2.Read())
{
if (reader2.NodeType == XmlNodeType.Element)
{
switch (reader2.Name)
{
case "the_node":
the_node = new My_Node();
list_myNodes.Add(the_node);
the_node.howdeep = reader2.Depth;
break;
case "name":
[......]
case "argument":
[......]
}
}
}
后來,我得到了所有正確的值,名稱正確,參數正確,其他所有參數都正確……只是深度是錯誤的
您是否嘗試使用XMLTextReader?
您可以在這里找到MSDN文檔!
另外,請參見下面的MSDN文檔中的代碼片段。
using System;
using System.IO;
using System.Xml;
public class Sample{
public static void Main(){
// Create the XML fragment to be parsed.
string xmlFrag =
@"<book>
<misc>
<style>paperback</style>
<pages>240</pages>
</misc>
</book>";
// Create the XmlNamespaceManager.
NameTable nt = new NameTable();
XmlNamespaceManager nsmgr = new XmlNamespaceManager(nt);
// Create the XmlParserContext.
XmlParserContext context = new XmlParserContext(null, nsmgr, null, XmlSpace.None);
// Create the reader.
XmlTextReader reader = new XmlTextReader(xmlFrag, XmlNodeType.Element, context);
// Parse the XML and display each node.
while (reader.Read()){
switch (reader.NodeType){
case XmlNodeType.Element:
Console.Write("{0} {1},{2} ", reader.Depth, reader.LineNumber, reader.LinePosition);
Console.WriteLine("<{0}>", reader.Name);
break;
case XmlNodeType.Text:
Console.Write("{0} {1},{2} ", reader.Depth, reader.LineNumber, reader.LinePosition);
Console.WriteLine(" {0}", reader.Value);
break;
case XmlNodeType.EndElement:
Console.Write("{0} {1},{2} ", reader.Depth, reader.LineNumber, reader.LinePosition);
Console.WriteLine("</{0}>", reader.Name);
break;
}
}
// Close the reader.
reader.Close();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.