zoukankan      html  css  js  c++  java
  • (C#) 操作XML之遍历

    XML内容是个树结构,用C#读取XML里的结点(Node)的时候,首先要理解在.NET的世界里,什么是结点(Node)?
    有如下XML:

    <?xml version="1.0" encoding="utf-8" ?>
    <bookstore>
      <book category="COOKING">
        <title lang="en">Everyday Italian</title>
        <author>Giada De Laurentiis</author>
        <year>2005</year>
        <price>30.00</price>
      </book>
      <book category="CHILDREN">
        <title lang="en">Harry Potter</title>
        <author>J K.Rowling</author>
        <year>2005</year>
        <price>29.99</price>
      </book>
      <book category="WEB">
        <title lang="en">Learning XML</title>
        <author>Erik T.Ray</author>
        <year>2003</year>
        <price>39.95</price>
      </book>
    </bookstore>

    其中: <?xml version="1.0" encoding="utf-8" ?> 是结点,<bookstore>是结点,category="COOKING"是结点,Everyday Italian也是结点。
    查看MSDN的 XmlNodeType 枚举便会知道详细的情况: http://msdn.microsoft.com/zh-cn/library/system.xml.xmlnodetype.aspx

    Node XmlNodeType
    <?xml version="1.0" encoding="utf-8" ?> XmlDeclaration
    <bookstore> Element
    <book category="COOKING"> Element
    category="COOKING" Attribute
    <title lang="en">Everyday Italian</title> Element
    Everyday Italian Text

    所以,如果想获取所有的书详细信息(title,author,year,price),那么就需要遍历所有的Text结点。

            private void TraverseTextNodeInnerText(XmlNode node)
            {
                if (node.HasChildNodes)
                {
                    XmlNodeList nodeList = node.ChildNodes;
                    foreach (XmlNode nd in nodeList)
                    {
                        if (nd.NodeType == XmlNodeType.Text)  
                        {
                            _TextNodeInnerTexts.Add(nd.InnerText);
                        }
                        TraverseTextNodeInnerText(nd); 
                    }
                }
            }
    
            public string[] GetAllTextNodeInnerText(string node)
            {
                XmlDocument doc = XMLLoad();
                XmlNode nd = doc.SelectSingleNode(node);
                TraverseTextNodeInnerText(nd);
                return this._TextNodeInnerTexts.ToArray(); 
            }

     输出如下:

    Everyday Italian

    Gida De Laurentiis

    2005

    30.00

    Harry Potter

    J K.Rowling

    2005

    29.99

    Learning XML

    Erik T.Ray

    2003

    39.95

    用LINQ to XML 也可以简单的对XML进行操作。 

  • 相关阅读:
    LeetCode对撞指针汇总
    167. Two Sum II
    215. Kth Largest Element in an Array
    2018Action Recognition from Skeleton Data via Analogical Generalization over Qualitative Representations
    题解 Educational Codeforces Round 84 (Rated for Div. 2) (CF1327)
    题解 JZPKIL
    题解 八省联考2018 / 九省联考2018
    题解 六省联考2017
    题解 Codeforces Round #621 (Div. 1 + Div. 2) (CF1307)
    题解Codeforces Round #620 (Div. 2)
  • 原文地址:https://www.cnblogs.com/fdyang/p/2911232.html
Copyright © 2011-2022 走看看