C#读取XML DOM方式读取

来源:互联网 发布:无线局域网 网络凭证 编辑:程序博客网 时间:2024/06/11 20:54

第一种方法DOM方式读取

DOM其实就是节点组成的层次结构.我们首先把xml文件读取到内存中以树状结构存储,以后操作的时候只需要对内存进行操作就可以了.

在C#中System.Xml命名空间来帮助我们做这个工作.

首先看下类结构:

System.Object
----System.Xml.XmlNode
--------System.Xml.XmlAttribute
--------System.Xml.XmlLinkedNode

----------------System.Xml.XmlElement
--------System.Xml.XmlDocument
--------System.Xml.XmlDocumentFragment
--------System.Xml.XmlEntity
--------System.Xml.XmlNotation

XmlNode表示 XML 文档中的单个节点为抽象类.详细请看MSDN

下面用四中方法读取XmlFile.xml文件:

第一种:一层层循环

第二种:递归

第三种:XPath

第四种:微软提供的数据模型的实例导航(其实就是XPath方法)

 

XmlFile.xml文件:
  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <myFamliy>
  3.     <person>
  4.         <name>爸爸</name>
  5.         <age>54</age>
  6.         <gender></gender>
  7.     </person>
  8.     <person>
  9.         <name>妈妈</name>
  10.         <age>53</age>
  11.         <gender></gender>
  12.     </person>
  13.     <person>
  14.         <name>哥哥</name>
  15.         <age>28</age>
  16.         <gender></gender>
  17.     </person>
  18.     <person>
  19.         <name>妹妹</name>
  20.         <age>24</age>
  21.         <gender></gender>
  22.     </person>
  23. </myFamliy>

C#代码:

  1. using System;
  2. using System.Configuration;
  3. using System.Data;
  4. using System.Linq;
  5. using System.Web;
  6. using System.Web.Security;
  7. using System.Web.UI;
  8. using System.Web.UI.HtmlControls;
  9. using System.Web.UI.WebControls;
  10. using System.Web.UI.WebControls.WebParts;
  11. using System.Xml.Linq;
  12. using System.Xml;
  13. public partial class _Default : System.Web.UI.Page 
  14. {
  15.     protected void Page_Load(object sender, EventArgs e)
  16.     {
  17.         System.Xml.XmlDocument doc = new System.Xml.XmlDocument();
  18.         doc.Load(@"XMLFile.xml");
  19.         XmlElement root=doc.DocumentElement;//跟元素
  20.         //RecursionNode(root);
  21.         //ForeachNode(root);
  22.         string strXPath = "/myFamliy/person/name/text()";
  23.         //XPathMethod(root, strXPath);
  24.         MicrosoftXPath(strXPath);
  25.     }
  26.     //循环
  27.     private void ForeachNode(XmlElement root)
  28.     {
  29.         System.Xml.XmlNodeList list = root.ChildNodes;  //跟元素下的子节点(列表)
  30.         foreach (XmlNode node1 in list)
  31.         {
  32.             Response.Write(string.Format(" 节点类型:{0} 节点名:{1} | 节点值:{2}", node1.NodeType, node1.Name, node1.Value) + "<br />");
  33.             XmlNodeList child = node1.ChildNodes;
  34.             foreach (XmlNode node2 in child)
  35.             {
  36.                 Response.Write(string.Format(" 节点类型:{0} 节点名:{1} | 节点值:{2}", node2.NodeType, node2.Name, node2.Value) + "<br />");
  37.                 XmlNodeList child2 = node2.ChildNodes;
  38.                 foreach (XmlNode node3 in child2)
  39.                 {
  40.                     Response.Write(string.Format(" 节点类型:{0} 节点名:{1} | 节点值:{2}", node3.NodeType, node3.Name, node3.Value) + "<br />");
  41.                 }
  42.             }
  43.         }
  44.     }
  45.     //递归
  46.     private void RecursionNode(XmlNode node)
  47.     {
  48.         Response.Write(string.Format(" 节点类型:{0} 节点名:{1} | 节点值:{2}", node.NodeType, node.Name, node.Value) + "<br />");
  49.         if (node.HasChildNodes)
  50.         {
  51.             foreach (XmlNode xn in node)
  52.             {
  53.                 RecursionNode(xn);
  54.             }
  55.         }
  56.     }
  57.     //xpath
  58.     private void XPathMethod(XmlNode node, string strPath)
  59.     {
  60.         //省略strPath验证
  61.         //SelectNodes方法返回node所以节点
  62.         XmlNodeList list= node.SelectNodes(strPath);
  63.         foreach (XmlNode xmlNode in list)
  64.         {
  65.             Response.Write(xmlNode.Value+"<br>");
  66.         }
  67.         //SelectSingleNode方法返回第一个节点
  68.         XmlNode firstCXmlNode=node.SelectSingleNode(strPath);
  69.         Response.Write("第一个节点值为:" + firstCXmlNode.Value);
  70.     }
  71.      //XPath数据模型的实例进行导航和编辑。
  72.     private void MicrosoftXPath(string strPath)
  73.     {
  74.         System.Xml.XPath.XPathDocument document
  75.             =new System.Xml.XPath.XPathDocument (@"XMLFile.xml");
  76.         //取得导航器
  77.         System.Xml.XPath.XPathNavigator nav = document.CreateNavigator();
  78.         //Select()方法:选择nav中的所有节点,查询的结果返回一个迭代器 XPathNodeIterator
  79.         System.Xml.XPath.XPathNodeIterator iterator=nav.Select(strPath);
  80.         foreach (System.Xml.XPath.XPathNavigator n in iterator)
  81.         {
  82.             Response.Write(n.Value+"<br>");
  83.         }
  84.         //SelectSingleNode()方法:选择 nav 中的单个节点,返回XPathNavigator类型
  85.         System.Xml.XPath.XPathNavigator firstNav = nav.SelectSingleNode(strPath);
  86.         Response.Write("第一个节点值为:"+firstNav.Value);
  87.     }
  88. }
原创粉丝点击