第一种方法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文件:
- <?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);
- }
- //循环
- private void ForeachNode(XmlElement root)
- {
- System.Xml.XmlNodeList list = root.ChildNodes; //跟元素下的子节点(列表)
- foreach (XmlNode node1 in list)
- {
- Response.Write(string.Format(" 节点类型:{0} 节点名:{1} | 节点值:{2}", node1.NodeType, node1.Name, node1.Value) + "<br />");
- XmlNodeList child = node1.ChildNodes;
- foreach (XmlNode node2 in child)
- {
- Response.Write(string.Format(" 节点类型:{0} 节点名:{1} | 节点值:{2}", node2.NodeType, node2.Name, node2.Value) + "<br />");
- XmlNodeList child2 = node2.ChildNodes;
- foreach (XmlNode node3 in child2)
- {
- Response.Write(string.Format(" 节点类型:{0} 节点名:{1} | 节点值:{2}", node3.NodeType, node3.Name, node3.Value) + "<br />");
- }
- }
- }
- }
- //递归
- private void RecursionNode(XmlNode node)
- {
- Response.Write(string.Format(" 节点类型:{0} 节点名:{1} | 节点值:{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验证
- //SelectNodes方法返回node所以节点
- XmlNodeList list= node.SelectNodes(strPath);
- foreach (XmlNode xmlNode in list)
- {
- Response.Write(xmlNode.Value+"<br>");
- }
- //SelectSingleNode方法返回第一个节点
- XmlNode firstCXmlNode=node.SelectSingleNode(strPath);
- Response.Write("第一个节点值为:" + firstCXmlNode.Value);
- }
- //XPath数据模型的实例进行导航和编辑。
- private void MicrosoftXPath(string strPath)
- {
- System.Xml.XPath.XPathDocument document
- =new System.Xml.XPath.XPathDocument (@"XMLFile.xml");
- //取得导航器
- System.Xml.XPath.XPathNavigator nav = document.CreateNavigator();
- //Select()方法:选择nav中的所有节点,查询的结果返回一个迭代器 XPathNodeIterator
- System.Xml.XPath.XPathNodeIterator iterator=nav.Select(strPath);
- foreach (System.Xml.XPath.XPathNavigator n in iterator)
- {
- Response.Write(n.Value+"<br>");
- }
- //SelectSingleNode()方法:选择 nav 中的单个节点,返回XPathNavigator类型
- System.Xml.XPath.XPathNavigator firstNav = nav.SelectSingleNode(strPath);
- Response.Write("第一个节点值为:"+firstNav.Value);
- }
- }
|