|
第一種方法DOM方式讀取
DOM其實(shí)就是節(jié)點(diǎn)組成的層次結(jié)構(gòu).我們首先把xml文件讀取到內(nèi)存中以樹狀結(jié)構(gòu)存儲(chǔ),以后操作的時(shí)候只需要對(duì)內(nèi)存進(jìn)行操作就可以了.
在C#中System.Xml命名空間來幫助我們做這個(gè)工作.
首先看下類結(jié)構(gòu):
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 文檔中的單個(gè)節(jié)點(diǎn)為抽象類.詳細(xì)請(qǐng)看MSDN
下面用四中方法讀取XmlFile.xml文件:
第一種:一層層循環(huán)
第二種:遞歸
第三種:XPath
第四種:微軟提供的數(shù)據(jù)模型的實(shí)例導(dǎo)航(其實(shí)就是XPath方法)
XmlFile.xml文件:
- <?xml version="1.0" encoding="utf-8" ?>
- <myFamliy>
- <person>
- <name>爸爸</name>
- <age>54</age>
- <gender>男</gender>
- </person>
- <person>
- <name>媽媽</name>
- <age>53</age>
- <gender>女</gender>
- </person>
- <person>
- <name>哥哥</name>
- <age>28</age>
- <gender>男</gender>
- </person>
- <person>
- <name>妹妹</name>
- <age>24</age>
- <gender>女</gender>
- </person>
- </myFamliy>
C#代碼:
- using System;
- using System.Configuration;
- using System.Data;
- using System.Linq;
- using System.Web;
- using System.Web.Security;
- using System.Web.UI;
- using System.Web.UI.HtmlControls;
- using System.Web.UI.WebControls;
- using System.Web.UI.WebControls.WebParts;
- using System.Xml.Linq;
- using System.Xml;
- public partial class _Default : System.Web.UI.Page
- {
- protected void Page_Load(object sender, EventArgs e)
- {
- System.Xml.XmlDocument doc = new System.Xml.XmlDocument();
- doc.Load(@"XMLFile.xml");
- XmlElement root=doc.DocumentElement;//跟元素
- //RecursionNode(root);
- //ForeachNode(root);
- string strXPath = "/myFamliy/person/name/text()";
- //XPathMethod(root, strXPath);
- MicrosoftXPath(strXPath);
- }
- //循環(huán)
- private void ForeachNode(XmlElement root)
- {
- System.Xml.XmlNodeList list = root.ChildNodes; //跟元素下的子節(jié)點(diǎn)(列表)
- foreach (XmlNode node1 in list)
- {
- Response.Write(string.Format(" 節(jié)點(diǎn)類型:{0} 節(jié)點(diǎn)名:{1} | 節(jié)點(diǎn)值:{2}", node1.NodeType, node1.Name, node1.Value) + "<br />");
- XmlNodeList child = node1.ChildNodes;
- foreach (XmlNode node2 in child)
- {
- Response.Write(string.Format(" 節(jié)點(diǎn)類型:{0} 節(jié)點(diǎn)名:{1} | 節(jié)點(diǎn)值:{2}", node2.NodeType, node2.Name, node2.Value) + "<br />");
- XmlNodeList child2 = node2.ChildNodes;
- foreach (XmlNode node3 in child2)
- {
- Response.Write(string.Format(" 節(jié)點(diǎn)類型:{0} 節(jié)點(diǎn)名:{1} | 節(jié)點(diǎn)值:{2}", node3.NodeType, node3.Name, node3.Value) + "<br />");
- }
- }
- }
- }
- //遞歸
- private void RecursionNode(XmlNode node)
- {
- Response.Write(string.Format(" 節(jié)點(diǎn)類型:{0} 節(jié)點(diǎn)名:{1} | 節(jié)點(diǎn)值:{2}", node.NodeType, node.Name, node.Value) + "<br />");
- if (node.HasChildNodes)
- {
- foreach (XmlNode xn in node)
- {
- RecursionNode(xn);
- }
- }
- }
- //xpath
- private void XPathMethod(XmlNode node, string strPath)
- {
- //省略strPath驗(yàn)證
- //SelectNodes方法返回node所以節(jié)點(diǎn)
- XmlNodeList list= node.SelectNodes(strPath);
- foreach (XmlNode xmlNode in list)
- {
- Response.Write(xmlNode.Value+"<br>");
- }
- //SelectSingleNode方法返回第一個(gè)節(jié)點(diǎn)
- XmlNode firstCXmlNode=node.SelectSingleNode(strPath);
- Response.Write("第一個(gè)節(jié)點(diǎn)值為:" + firstCXmlNode.Value);
- }
- //XPath數(shù)據(jù)模型的實(shí)例進(jìn)行導(dǎo)航和編輯。
- private void MicrosoftXPath(string strPath)
- {
- System.Xml.XPath.XPathDocument document
- =new System.Xml.XPath.XPathDocument (@"XMLFile.xml");
- //取得導(dǎo)航器
- System.Xml.XPath.XPathNavigator nav = document.CreateNavigator();
- //Select()方法:選擇nav中的所有節(jié)點(diǎn),查詢的結(jié)果返回一個(gè)迭代器 XPathNodeIterator
- System.Xml.XPath.XPathNodeIterator iterator=nav.Select(strPath);
- foreach (System.Xml.XPath.XPathNavigator n in iterator)
- {
- Response.Write(n.Value+"<br>");
- }
- //SelectSingleNode()方法:選擇 nav 中的單個(gè)節(jié)點(diǎn),返回XPathNavigator類型
- System.Xml.XPath.XPathNavigator firstNav = nav.SelectSingleNode(strPath);
- Response.Write("第一個(gè)節(jié)點(diǎn)值為:"+firstNav.Value);
- }
- }
|