簡體   English   中英

如何使用C#和XMLReader獲取當前XML節點的深度

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM