• C# XML 基础解系


    1、一般处理

     1             XmlDocument xmlDoc = new XmlDocument();
     2             xmlDoc.LoadXml("<?xml version="1.0" encoding="utf-8"?><HH><CODE>11</CODE><NAME>kkkk</NAME></HH>");
     3             XmlNode rootNode = xmlDoc.SelectSingleNode("HH");
     4             foreach (XmlNode xxNode in rootNode.ChildNodes)
     5             {
     6                 string dsf = xxNode.InnerText;
     7                 Console.WriteLine(dsf);
     8                 string sdf = xxNode.Name;
     9                 Console.WriteLine(sdf);
    10             }  
    11             Console.ReadLine();

    2、利用DataTable

     1             DataSet dsData = new DataSet();
     2             dsData.ReadXml(new XmlTextReader(new StringReader("<?xml version="1.0" encoding="utf-8"?><HH><CODE>11</CODE><NAME>kkkk</NAME></HH>")));
     3             DataTable dt = dsData.Tables["HH"];
     4 
     5 
     6             foreach (DataRow dr in dt.Rows)
     7             {
     8                 foreach (DataColumn dc in dr.Table.Columns)
     9                 {
    10                     string n = dc.ColumnName;
    11                     Console.WriteLine(n);
    12                     string value = dr[n].ToString();
    13                     Console.WriteLine(value);
    14                 }
    15             } 
    16             Console.ReadLine();

    3、带有命名空间(NameSpace)的XML文本解析

     1 <?xml version="1.0" encoding="utf-8" ?>
     2 <bookstore xmlns="http://www.lucernepublishing.com"
     3            xml:base="http://www.semanticweb.org/ontologies/2012/2/OntologyMinePower.owl">
     4   <book>
     5     <title>C语言</title>
     6     <author name ="XIAO">
     7       <age>25</age>
     8     </author>
     9     <price>50</price>
    10   </book>
    11   <book>
    12     <title>数据库</title>
    13     <price>100</price >
    14   </book >
    15   <book>
    16     <title>数据结构</title>
    17     <age>100</age>
    18     <author name ="Wang">
    19       <age>25</age>
    20       <sex>female</sex>
    21     </author>
    22     <price>66.5</price >
    23   </book >
    24 </bookstore>
     1             XmlDocument doc = new XmlDocument();
     2             doc.Load(@"....CD.xml");
     3 
     4             XmlElement root = null;
     5             root = doc.DocumentElement;
     6 
     7             XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
     8             nsmgr.AddNamespace("ab", "http://www.lucernepublishing.com");
     9            
    10             XmlNodeList listNodes = null;
    11             listNodes = doc.SelectNodes("/ab:bookstore/ab:book[ab:author[ab:sex]]/ab:price", nsmgr);
    12             foreach (XmlNode node in listNodes )
    13             {
    14                 richTextBox1.Text += node.InnerText + "
    ";
    15             }

    该XPath语言的意思是查询bookstore下的所有带有author节点,并且author节点带有sex节点的book节点的price子节点。其结果是66.5

    对于有命名空间的XML文本的解析,只需调用XmlNode.SelectNodes的不同的重载函数,赋予XmlNamespaceManager参数,并相应调整XPath语句即可。

     1 <?xml version="1.0" encoding="utf-8" ?>
     2 <bookstore>
     3   <book>
     4     <title>C语言</title>
     5     <author name ="XIAO">
     6       <age>25</age>
     7     </author>
     8     <price>50</price>
     9   </book>
    10   <book>
    11     <title>数据库</title>
    12     <price>100</price >
    13   </book >
    14   <book>
    15     <title>数据结构</title>
    16     <age>100</age>
    17     <author name ="Wang">
    18       <age>25</age>
    19       <sex>female</sex>
    20     </author>
    21     <price>66.5</price >
    22   </book >
    23 </bookstore>
     1             XmlDocument doc = new XmlDocument();
     2             doc.Load(@"....CD.xml");
     3 
     4             XmlElement root = null;
     5             root = doc.DocumentElement;
     6 
     7             XmlNodeList listNodes = null;
     8             listNodes = root.SelectNodes("/bookstore/book/price");
     9             foreach (XmlNode node in listNodes )
    10             {
    11                 richTextBox1.Text += node.InnerText + "
    ";
    12             }

    这里 listNodes=root.SelectNodes("/bookstore/book/price");意思是选取所有符合bookstore——>book——>price层级关系的price节点

    3.XPath详解

    1)"/bookstore/book/price"

    XPath的开头是一个斜线(/)代表这是绝对路径,这可以选出所有路径符合这个模式的元素。这代表选出所有bookstore根节点下的book元素下的price元素。

    2)"//title"

    开头是两个斜线(//)表示文件中所有符合模式的元素都会被选出来,即使是处于树中不同的层级也会被选出来。这代表选出所有title元素。

    3)"/bookstore/book/author/*"

    使用星号(*)可以选择未知的元素。这代表选出bookstore根节点下的book节点下的anthor节点下的所有可能的节点。

    得到的结果:25 25 female

    4)"/bookstore/book/*/age"

    上面的语法会选出所有bookstore根节点下的book节点的隔一个层次的age节点。

    得到的结果为:25 25

    5)"/*/*/age"

    选取有两个层级的age元素,得到的结果为:100

    要注意的是,想要存取不分层级的元素,XPath语法必须以两个斜线开头(//),想要存取未知元素才用星号(*),星号只能代表未知名称的元素,不能代表未知层级的元素。

    6)"bookstore/book[1]/title"

     使用中括号可以选择分支。这代表选择bookstore根节点下第一个book节点的title节点。

    得到的结果为:C语言

    7)"bookstore/book[last()]/title"

     同样,这里表示选择最后一个节点,得到的结果是:数据结构

    8)"bookstore/book/author[sex]"

    这里表示选取所有带有sex元素并满足一定层次结构的author节点,得到的结果是:25female

    9)"/bookstore/book[price=66.5]/title"

     选取price元素值是66.5的book节点的title子节点,得到的结果是:数据结构

    10)"/bookstore/book/title | /bookstore/book/price"

     使用Or操作数(|)就可以选择一个以上的路径。这里表示选取符合一定层次结构的title元素与price元素

    其结果是:C语言 50 数据库 100 数据结构 66.5

     11)"//@name"

    XPath中,除了选择元素以外,也可以选择属性,属性都是以@开头。这里表示选取所有的name属性。

    其结果是:XIAO Wang

     12)"//author[@name]/age"

    这里表示选取所有具有name属性的author节点的age节点。其结果是:25 25

    13)"//*[@*]"

    选取所有有属性的节点。其结果是:25 25female

    14)"//author[@name='Wang']/sex"

    选取所有属性name值为Wang的author节点的sex子节点。其结果是:female

    转载自          三人成虎       https://www.cnblogs.com/hnsongbiao/p/5636076.html

  • 相关阅读:
    有趣的网抑云
    [扩展阅读] timeit 模块详解(准确测量小段代码的执行时间)
    第044讲:魔法方法:简单定制
    第043讲:魔法方法:算术运算2
    第042讲:魔法方法:算术运算1
    第041讲:魔法方法:构造和析构
    吴恩达深度学习 第一课第四周课后编程作业 assignment4_2
    吴恩达深度学习 第一课第四周课后编程作业 assignment4_1
    第040讲:类和对象:一些相关的BIF
    [扩展阅读] property 的详细使用方法
  • 原文地址:https://www.cnblogs.com/cwmizlp/p/9452957.html
Copyright © 2020-2023  润新知