zoukankan      html  css  js  c++  java
  • 读取XML文件(XmlNode和XmlElement区别)

    XmlNode和XmlElement区别。这两个类的功能极其类似(因为我们一般都是在对Element节点进行操作)。

     1、通过继承关系XmlElement继承自XmlLinkedNode又继承自XmlNode类,由此可知XmlElement是XmlNode的子类。我们知道子类继承了父类所有的属性和方法,因此,XmlNode所拥有的方法和属性,在XmlElement类中也是可以使用的。

    2、XmlElement是特殊的XmlNode类,Xml节点有多种类型:属性节点、注释节点、文本节点、元素节点等。也就是XmlNode是这多种节点的统称。但是XmlElement专门指的就是元素节点。

    3、XmlElement是具现类,可以直接实例化,而XmlNode是抽象类,必须通过XmlDocument实例通过CreateNode创建。

    4、XmlElement拥有众多对Attribute的操作方法,可以方便的对其属性进行读写操作(XmlNode也可以通过Attributes属性获取属性列表)。

    元素(Element)和结点(Node)的区别,元素是一个小范围的定义,必须是含有完整信息的结点才是一个元素,例如<div>...</div>。但是一个结点不一定是一个元素,而一个元素一定是一个结点。
    <Alarmlock="true">             //node  
          <Time>                       //node  
              StringValue              //node  
          </Time>                     //node  
    </Alarm>                          //node  
      以上Alarm(元素节点),lock(属性节点),Time(元素节点),StringValue(文本节点)都是Node,但是只有 <Alarm>......</Alarm>和<Time>StringValue</Time>是Element  

    XmlDocument xmlDoc = new XmlDocument();
    string filePath = Path.Combine(AppContext.BaseDirectory, "Configuration", sDir, string.Format("{0}.xml", sXmlName));

    StringBuilder builder = new StringBuilder();
    using (FileStream fs = File.Open(filePath, FileMode.OpenOrCreate))
    {
    using (StreamReader sr = new StreamReader(fs, Encoding.UTF8))
    {

    builder.Append(sr.ReadToEnd());
    }
    }
    if (builder.Length > 0)
    xmlDoc.LoadXml(builder.ToString());      //
    return xmlDoc;

    注意:

    xmldoc.load可以加载文件,比如:xmldoc.load("c:\a.xml");
    而xmldoc.loadXML是加载xml格式的字符串,比如:xmldoc.loadXML("<aab>aaa</aab>")



    -----------------------
    举例说明

    1: <?xml version="1.0" encoding="utf-8"?>
       2: <bookstore>
       4:   <book Type="必修课" ISBN="7-111-19149-2">
       5:     <title>数据结构</title>
       6:     <author>严蔚敏</author>
       7:     <price>30.00</price>
       8:   </book>
       9:   <book Type="必修课" ISBN="7-111-19149-3">
      10:     <title>路由型与交换型互联网基础</title>
      11:     <author>程庆梅</author>
      12:     <price>27.00</price>
      13:   </book>
      34: </bookstore>
    1: // 得到根节点bookstore
       2: XmlNode xn = xmlDoc.SelectSingleNode("bookstore");
       5: // 得到根节点的所有子节点
       6: XmlNodeList xnl = xn.ChildNodes;
       8: foreach (XmlNode xn1 in xnl)
       9: {
      11:     // 将节点转换为元素,便于得到节点的属性值
      12:     XmlElement xe = (XmlElement)xn1;
      13:     // 得到Type和ISBN两个属性的属性值
      14:     bookModel.BookISBN = xe.GetAttribute("ISBN").ToString();
      15:     bookModel.BookType = xe.GetAttribute("Type").ToString();
      16:     // 得到Book节点的所有子节点
      17:     XmlNodeList xnl0 = xe.ChildNodes;
      18:     bookModel.BookName=xnl0.Item(0).InnerText;
      19:     bookModel.BookAuthor=xnl0.Item(1).InnerText;
      20:     bookModel.BookPrice=Convert.ToDouble(xnl0.Item(2).InnerText);
      21:     bookModeList.Add(bookModel);
      22: }

    //获取根节点

     XmlDocument doc = new XmlDocument();

    doc.Load(filePath);
    XmlElement root = doc.DocumentElement;
    //获取子节点集合
    //XmlNodeList xnl = root.ChildNodes;
    XmlNodeList personNodes = root.GetElementsByTagName("book"); //两个table




    方法一:SelectNodes
    xml样式:

    <?xml version="1.0" encoding="utf-8" ?>
    <TableLists>
         <Columns Name="A01" >
                 <Item Id="ID1" Filed="Name" MappingName="姓名" Code="Value" />
                 <Item Id="ID2" Filed="Name" MappingName="年龄" Code="Value"/>
                 <Item Id="ID3" Filed="Name" MappingName="性别" Code="Value"/>
                 <Item Id="ID4" Filed="Name" MappingName="部门" Code="Value"/>
        </Columns>
        <Columns Name="A02" >
                 <Item Id="ID21" Filed="Name" MappingName="姓名" Code="Value" />
                 <Item Id="ID22" Filed="Name" MappingName="年龄" Code="Value"/>
                 <Item Id="ID23" Filed="Name" MappingName="性别" Code="Value"/>
                 <Item Id="ID24" Filed="Name" MappingName="部门" Code="Value"/>
         </Columns>
    </TableLists>

    XmlDocument doc = new XmlDocument();
    doc.Load(fileRelationPath);

    XmlNodeList a01Nodes = doc.SelectNodes("TableLists/Columns"); //2个columns
    XmlNodeList a01Node = doc.SelectNodes("//Columns"); //2个columns

    XmlNodeList a01Nodes = doc.SelectNodes("TableLists/Columns/Item"); //8个Item

    XmlNodeList a01Node = doc.SelectNodes("//Item"); //8个Item
    foreach (XmlNode xnode in a01Nodes)
    {
    //获取表名字
    XmlElement xe = (XmlElement)xnode;
    string tableName = xe.GetAttribute("Name").ToString(); //表名字

    }

     doc.ChildNodes[1].ChildNodes[0].ChildNodes
    说明:
    doc.ChildNodes的值[0] <?xml version="1.0" encoding="utf-8" ?>
                      [1] TableLists  根元素节点





  • 相关阅读:
    第一次博客作业
    第一次个人编程作业
    第一次博客作业
    第一次个人编程作业
    第一次博客作业
    node.js&electron$npm的关系
    前端常用相关缩写
    PS通道抠图
    (AOP)理解
    mybatis内置二级缓存。
  • 原文地址:https://www.cnblogs.com/DSC1991/p/7911215.html
Copyright © 2011-2022 走看看