最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

c#通過(guò)xpath讀取xml示例

 更新時(shí)間:2014年04月16日 09:51:51   作者:  
這篇文章主要介紹了c#通過(guò)xpath讀取xml示例,需要的朋友可以參考下

需要修改Main方法第一行代碼的路徑為你的books.xml文件絕對(duì)路徑或相對(duì)路徑。代碼演示了XPath各種語(yǔ)法的使用情況

books.xml

復(fù)制代碼 代碼如下:

<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore>

  <book category="COOKING">
    <title lang="en">Everyday Italian</title>
    <author>Giada De Laurentiis</author>
    <year>2005</year>
    <price>30.00</price>
  </book>

  <book category="CHILDREN">
    <title lang="en">Harry Potter</title>
    <author>J K. Rowling</author>
    <year>2005</year>
    <price>29.99</price>
  </book>

  <book category="WEB">
    <title lang="en">XQuery Kick Start</title>
    <author>James McGovern</author>
    <author>Per Bothner</author>
    <author>Kurt Cagle</author>
    <author>James Linn</author>
    <author>Vaidyanathan Nagarajan</author>
    <year>2003</year>
    <price>49.99</price>
  </book>

  <book category="WEB">
    <title lang="en">Learning XML</title>
    <author>Erik T. Ray</author>
    <year>2003</year>
    <price>39.95</price>
  </book>

</bookstore>

主程序

復(fù)制代碼 代碼如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;

namespace XmlProcessTest
{
    public class Program
    {
        /// <summary>
        /// 加載XML文件
        /// </summary>
        /// <param name="xmlFilePath">XML文件路徑</param>
        /// <returns></returns>
        public static XmlDocument LoadXmlDoc(string xmlFilePath)
        {
            var xmlDoc = new XmlDocument();
            xmlDoc.Load(xmlFilePath);

            return xmlDoc;
        }

        /// <summary>
        /// 根據(jù)指定的XPath表達(dá)式獲取XML結(jié)點(diǎn)列表
        /// </summary>
        /// <param name="xmlDoc"></param>
        /// <param name="xpathExpr"></param>
        /// <returns></returns>
        public static XmlNodeList GetXmlNodes(XmlDocument xmlDoc, string xpathExpr)
        {
            if (xmlDoc == null)
                return null;

            return xmlDoc.SelectNodes(xpathExpr);
        }

        public static string GetXmlNodeInfo(XmlNode node, string type="xml")
        {
            if (node == null)
                return "Empty node or error node";

            string xmlNodeInfo = null;
            switch (type)
            {
                case "text":
                    xmlNodeInfo = node.InnerText;
                    break;
                default:
                    xmlNodeInfo = node.InnerXml;
                    break;
            }

            return xmlNodeInfo;
        }

        public static void Main(string[] args)
        {
            var xmlDoc = LoadXmlDoc(@"你的books.xml文件路徑");

            var rootExpr = "/bookstore";   //  根節(jié)點(diǎn)對(duì)應(yīng)的XPath表達(dá)式
            var rootNode = GetXmlNodes(xmlDoc, rootExpr);   //
            Console.WriteLine("XPath表達(dá)式為 /bookstore,根節(jié)點(diǎn)bookstore的所有子節(jié)點(diǎn)XML內(nèi)容如下:");
            Console.WriteLine(GetXmlNodeInfo(rootNode[0]));

            Console.WriteLine();

            var allBooksExpr = "/bookstore/book"; // 根節(jié)點(diǎn)bookstore的子元素的所有子節(jié)點(diǎn)
            var bookNodes = GetXmlNodes(xmlDoc, allBooksExpr);
            Console.WriteLine("XPath表達(dá)式為 bookstore/book,book節(jié)點(diǎn)共有:" + bookNodes.Count);

            Console.WriteLine();

            var anyBookExpr = "http://book"; // 選取所有book子元素,而不管它們?cè)谖臋n中的位置
            var anyBookNodes = GetXmlNodes(xmlDoc, anyBookExpr);
            Console.WriteLine("XPath表達(dá)式為 //book,book節(jié)點(diǎn)共有:" + anyBookNodes.Count);
            Console.WriteLine(anyBookNodes[0].InnerXml);
            Console.WriteLine(anyBookNodes[0].OuterXml);

            Console.WriteLine();

            var categoryExpr = "http://@category";   // 選取名為category的所有屬性
            var allCategoryNodes = GetXmlNodes(xmlDoc, categoryExpr);
            Console.WriteLine("XPath表達(dá)式為 //@category,category節(jié)點(diǎn)共有:" + allCategoryNodes.Count);
            Console.WriteLine(allCategoryNodes[0].InnerText);
            Console.WriteLine(allCategoryNodes[0].InnerXml);

            Console.WriteLine();

            var titleWithLangExpr = "http://title[@lang]";   // 選取所有帶有l(wèi)ang屬性的title節(jié)點(diǎn)
            var titleWithLangNodes = GetXmlNodes(xmlDoc, titleWithLangExpr);
            Console.WriteLine("XPath表達(dá)式為 //title[@lang],帶lang屬性的title節(jié)點(diǎn)共有:" + titleWithLangNodes.Count);
            Console.WriteLine(GetXmlNodeInfo(titleWithLangNodes[0]));

            var englishTitleExpr = "http://title[@lang='en']";   // 選取所有l(wèi)ang屬性值為en的title節(jié)點(diǎn)
            var englishTitleNodes = GetXmlNodes(xmlDoc, englishTitleExpr);
            Console.WriteLine("XPath表達(dá)式為 //title[@lang='en'],lang屬性值為en的title節(jié)點(diǎn)共有:" + englishTitleNodes.Count);
            Console.WriteLine(GetXmlNodeInfo(englishTitleNodes[0]));

            Console.WriteLine();

            // 使用索引的XPath查詢
            var indexExpr = "/bookstore/book[1]";   // 取bookstore子元素的第一個(gè)book元素
            var firstBookNode = GetXmlNodes(xmlDoc, indexExpr);
            Console.WriteLine("XPath表達(dá)式為 /bookstore/book[1],節(jié)點(diǎn)數(shù)為:" + firstBookNode.Count);
            Console.WriteLine(GetXmlNodeInfo(firstBookNode[0]));

            Console.WriteLine();

            var indexExpr2 = "/bookstore/book[last()]"; // 取bookstore子元素的最后一個(gè)book元素
            var lastBookNode = GetXmlNodes(xmlDoc, indexExpr2);
            Console.WriteLine("XPath表達(dá)式為 /bookstore/book[last()],節(jié)點(diǎn)數(shù)為:" + lastBookNode.Count);
            Console.WriteLine(GetXmlNodeInfo(lastBookNode[0]));

            Console.WriteLine();

            var indexExpr3 = "/bookstore/book[last()-1]"; // 取bookstore子元素的倒數(shù)第二個(gè)book元素
            var nextByLastBookNode = GetXmlNodes(xmlDoc, indexExpr3);
            Console.WriteLine("XPath表達(dá)式為 /bookstore/book[last()-1],節(jié)點(diǎn)數(shù)為:" + lastBookNode.Count);
            Console.WriteLine(GetXmlNodeInfo(nextByLastBookNode[0]));

            Console.WriteLine();

            var indexExpr4 = "/bookstore/book[position()<3]"; // 取bookstore的前兩個(gè)book子元素
            var firstTwoBookNodes = GetXmlNodes(xmlDoc, indexExpr4);
            Console.WriteLine("XPath表達(dá)式為 /bookstore/book[position()<3],節(jié)點(diǎn)數(shù)為:" + firstTwoBookNodes.Count);
            Console.WriteLine(GetXmlNodeInfo(firstTwoBookNodes[0]));

            Console.WriteLine();

            // 帶屬性值過(guò)濾條件的XPath表達(dá)式
            var fileterExpr = "/bookstore/book[price>35.00]";   // 選取bookstore的所有price屬性值大于35.00的book元素
            var bookGt35Nodes = GetXmlNodes(xmlDoc, fileterExpr);
            Console.WriteLine("XPath表達(dá)式為 /bookstore/book[price>35.00],節(jié)點(diǎn)數(shù)為:" + bookGt35Nodes.Count);
            Console.WriteLine(GetXmlNodeInfo(bookGt35Nodes[0]));

            // 通配符
            // @*                匹配任何屬性節(jié)點(diǎn)
            // node()             匹配任何類(lèi)型的節(jié)點(diǎn)
            // /bookstore/*   選取 bookstore 元素的所有子元素
            // //*                   選取文檔的所有元素
            // //title[@*]        選取所有帶有屬性的 title 元素
            var allTitleWithAttrExpr = "http://title[@*]";
            var allTitleWithAttrNodes = GetXmlNodes(xmlDoc, allTitleWithAttrExpr);
            Console.WriteLine("XPath表達(dá)式為 title[@*],節(jié)點(diǎn)數(shù)為:" + allTitleWithAttrNodes.Count);
            Console.WriteLine(GetXmlNodeInfo(allTitleWithAttrNodes[0]));

            Console.WriteLine();

            // |        或
            var titleAndPriceExpr = "http://book/title | //book/price";
            var titleAndPriceNodes = GetXmlNodes(xmlDoc, titleAndPriceExpr);
            Console.WriteLine("XPath表達(dá)式為 //book/title | //book/price,節(jié)點(diǎn)數(shù)為:" + titleAndPriceNodes.Count);
            Console.WriteLine(GetXmlNodeInfo(titleAndPriceNodes[0]));

            // text()  選取文本
            var titleTextExpr = "http://title/text()";
            var titleTextNodes = GetXmlNodes(xmlDoc, titleTextExpr);
            Console.WriteLine("XPath表達(dá)式為 //title/text(),節(jié)點(diǎn)數(shù)為:" + titleTextNodes.Count);
            Console.WriteLine(titleTextNodes[0].Value); // 文本節(jié)點(diǎn)的值

            Console.ReadKey();
        }
    }
}

相關(guān)文章

  • c#定期刪除文件的實(shí)操方法

    c#定期刪除文件的實(shí)操方法

    在本篇文章里小編給大家分享了關(guān)于c#定期刪除文件的方法和步驟,有需要的朋友們可以學(xué)習(xí)下。
    2019-02-02
  • c# socket心跳超時(shí)檢測(cè)的思路(適用于超大量TCP連接情況下)

    c# socket心跳超時(shí)檢測(cè)的思路(適用于超大量TCP連接情況下)

    這篇文章主要介紹了c# socket心跳超時(shí)檢測(cè)的思路(適用于超大量TCP連接情況下),幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下
    2021-03-03
  • C#單例模式(Singleton Pattern)實(shí)例教程

    C#單例模式(Singleton Pattern)實(shí)例教程

    這篇文章主要介紹了C#單例模式(Singleton Pattern)的實(shí)現(xiàn)方法,主要講述了即時(shí)加載的單例模式、延遲加載的單例模式與線程安全的單例模式,需要的朋友可以參考下
    2014-09-09
  • C#?基于TCP?實(shí)現(xiàn)掃描指定ip端口的方式示例

    C#?基于TCP?實(shí)現(xiàn)掃描指定ip端口的方式示例

    本文主要介紹了C#基于TCP實(shí)現(xiàn)掃描指定ip端口的方式示例,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • C#多線程之線程鎖

    C#多線程之線程鎖

    這篇文章介紹了C#多線程中的線程鎖,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05
  • C# 字符串處理小工具

    C# 字符串處理小工具

    本文主要介紹C#字符串處理小工具,實(shí)現(xiàn)功能包括:轉(zhuǎn)換為大寫(xiě);轉(zhuǎn)換為小寫(xiě);反轉(zhuǎn)字符串;匹配某字符串出現(xiàn)次數(shù);正則匹配;base64加密;base64解密;ROT13加密解密;MD5 32位加密。具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧
    2017-03-03
  • WPF?Trigger改變屬性無(wú)效問(wèn)題排查示例詳解

    WPF?Trigger改變屬性無(wú)效問(wèn)題排查示例詳解

    這篇文章主要為大家介紹了WPF?Trigger改變屬性無(wú)效問(wèn)題排查示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • C# 列表List的常用屬性和方法介紹

    C# 列表List的常用屬性和方法介紹

    這篇文章主要介紹了C# 列表List的常用屬性和方法介紹,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-04-04
  • 適合初學(xué)者開(kāi)發(fā)的C#在線英漢詞典小程序

    適合初學(xué)者開(kāi)發(fā)的C#在線英漢詞典小程序

    這篇文章主要為大家詳細(xì)介紹了適合初學(xué)者開(kāi)發(fā)的C#在線英漢詞典小程序,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • 動(dòng)態(tài)改變gridview列寬度函數(shù)分享

    動(dòng)態(tài)改變gridview列寬度函數(shù)分享

    通常用GridView綁定datatable,由于需要?jiǎng)討B(tài)綁定到不同的datatable所以需要?jiǎng)討B(tài)調(diào)整GridView的寬度。寫(xiě)了這個(gè)函數(shù)實(shí)現(xiàn)該功能
    2014-01-01

最新評(píng)論

彰化市| 嘉鱼县| 江永县| 沧州市| 上饶县| 泸溪县| 长泰县| 武穴市| 长乐市| 高安市| 兴国县| 天台县| 常熟市| 黔南| 安顺市| 广安市| 鄂州市| 新沂市| 彭阳县| 达州市| 永泰县| 察隅县| 邵东县| 土默特左旗| 县级市| 连州市| 双辽市| 台山市| 北辰区| 林周县| 卢氏县| 孟连| 乌拉特后旗| 仪陇县| 绥化市| 六盘水市| 商丘市| 宜川县| 菏泽市| 阿瓦提县| 天门市|