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
    }

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

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

    多思考,多创新,才是正道!
  • 相关阅读:
    Python中如何调用Linux命令
    python入门小记
    DNS域名解析的过程
    阿里云Aliyun_server
    ipython及Python初体验
    js 的数值限制可能引起的问题
    页面图片中间有条线----解决
    ie6幽灵文字及解决办法
    解除工商银行15分钟限制
    ie6 无法显示网页 已终止操作
  • 原文地址:https://www.cnblogs.com/shuang121/p/1962312.html
Copyright © 2011-2022 走看看