zoukankan      html  css  js  c++  java
  • 读取Xml文档的元素和属性

    <?xml version="1.0" encoding="utf-8" ?>
    <StuInfo>
      <student>
        <ID>1001</ID>
        <Name>张三</Name>
        <Sex>男</Sex>
        <Birthday age="23">1987-1-12</Birthday>
      </student>
      <student>
        <ID>1002</ID>
        <Name>李四</Name>
        <Sex>女</Sex>
        <Birthday age="24">1986-5-12</Birthday>
      </student>
      <student>
        <ID>1003</ID>
        <Name>王二</Name>
        <Sex>男</Sex>
        <Birthday age="25">1985-1-15</Birthday>
      </student>
    </StuInfo>

    看看上面的文档,当我们把它加载到内存中之后,各个节点都有自己的类型,首先整个xml都是document文档

    <?xml version="1.0" encoding="utf-8" ?>
    它则是XmlDeclaration类型的

    下面的StuInfo,student,ID,Name,sex,Birsthday都是Element类型

    1001,1002,1003,张三,李四,王五等都是#Text类型的

    知道上面的这些之后,那么我们在读取元素的时候就可以通过某个节点的ChildNodes属性获取其子节点的集合,然后根据节点的类型,也就是NodeType属性确定此节点是否是元素节点,或者文档节点等,元素节点的名称可以通过Names属性获取,其所对应的XML数据可以有InnerXml和OutXml,InnerText等来获取

    读取属性:

    要访问属性的值,必须获取该属性的所属的元素,当节点是元素的时候,可以通过HasAttribute方法查看是否存在任何与此元素相关的属性,然后检索属性,通过XmlNode.Attributes[index]获得相关值

    下面看一个实例

     protected void Page_Load(object sender, EventArgs e)
        {
            if(!IsPostBack)
            {
                XmlDocument doc = new XmlDocument();
                string path = Server.MapPath("~/XMLFile.xml");
                doc.Load(path);
                OperateXml(doc);
            }
        }

        #region 对xml文件进行操作的方法
        public void OperateXml(XmlNode doc)
        {
           //通过XmlDocument把xml文件加载到内存中,然后才能对其操作
           Response.Write("<li>节点类型"+doc.NodeType.ToString()+"节点名称"+doc.LocalName);
           if (!doc.HasChildNodes)
           {
               Response.Write(" " + doc.InnerXml);
           }
           if(doc.NodeType==XmlNodeType.Element)
           {
              
               if(doc.Attributes.Count>0)
               {
                   XmlAttribute dd = new XmlAttribute();
                  
                   for (int i = 0; i < doc.Attributes.Count; i++)
                   {
                       Response.Write("属性:" + doc.Attributes[i].LocalName + "=" + doc.Attributes[i].Value);
                   }
               }
               if(doc.ChildNodes[0].NodeType==XmlNodeType.Text)
               {
                   Response.Write(" 值为"+doc.InnerText);
               }
           } 
           if (doc.HasChildNodes)
           {
               for (int i = 0; i < doc.ChildNodes.Count; i++)
               {
                   OperateXml(doc.ChildNodes[i]);
               }
           }
          
        }
        #endregion
    }

    在这里采用的递归的方式完成的对子节点的操作

    里面的方法很多,操作的时候灵活使用!

    多思考,多创新,才是正道!
  • 相关阅读:
    洛谷 P1194 飞扬的小鸟 题解
    洛谷 P1197 星球大战 题解
    洛谷 P1879 玉米田Corn Fields 题解
    洛谷 P2796 Facer的程序 题解
    洛谷 P2398 GCD SUM 题解
    洛谷 P2051 中国象棋 题解
    洛谷 P1472 奶牛家谱 Cow Pedigrees 题解
    洛谷 P1004 方格取数 题解
    洛谷 P2331 最大子矩阵 题解
    洛谷 P1073 最优贸易 题解
  • 原文地址:https://www.cnblogs.com/shuang121/p/1962312.html
Copyright © 2011-2022 走看看