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

C#使用Linq to XML進行XPath查詢的代碼實現(xiàn)

 更新時間:2024年08月14日 10:13:42   作者:△曉風(fēng)殘月〆  
最近在用到HtmlAgliltyPack進行結(jié)點查詢時,發(fā)現(xiàn)這里選擇結(jié)點使用的是XPath,所以這里總結(jié)一下在C#中使用XPath查詢XML的方法,習(xí)慣了用Linq,這里也是用的Linq to xml的,需要的朋友可以參考下

最近在用到HtmlAgliltyPack進行結(jié)點查詢時,發(fā)現(xiàn)這里選擇結(jié)點使用的是XPath。所以這里總結(jié)一下在C#中使用XPath查詢XML的方法。習(xí)慣了用Linq,這里也是用的Linq to xml的。

Linq To XML的核心類是XDocumentXElement、XAttribute,需要引用using System.Xml.Linq命名空間。

這三個類簡單理解為:

XDocument:打開的整個XML文檔

XElement:節(jié)點元素

XAttribute:屬性

下面簡單介紹一下使用。

如有以下XML文件

  <?xml version="1.0" encoding="utf-8"?>
  <html>
    <head>
      <title>測試XML</title>
    </head>
    <body>
      <div class="card-container">
        <div class="item-title">
          <h3 class="item-shop-name">汪家羊肉館</h3>
        </div>
        <div class="item-comment">
          <span class="price1">¥62/人</span>
          <span class="price2">¥12/人</span>
          <span class="price3">2</span>
          <span class="price4">12</span>
        </div>
      </div>
    </body>
  </html>

打開XML文件

XDocument doc = XDocument.Load("demo.xml");

獲取根節(jié)點(html節(jié)點 返回XElement類型)

var root = doc.Root;

獲取第一個子節(jié)點(返回XElement類型)

var firstNode = root.FirstNode;

獲取全部子節(jié)點(返回IEnumerable<XNode>)

var allChildNode = root.Nodes();

獲取指定名稱的第一個子節(jié)點(返回XElement類型)

var headNode = root.Element("head");

獲取指定名稱的全部子節(jié)點(返回IEnumerable<XElement>)

var allNamedNode = root.Elements("head");

獲取節(jié)點指定名稱的屬性(<div class="card-container"> )

var attribute = root.Element("body").Element("div").Attribute("class");

獲取節(jié)點的全部屬性

var allAttributes = root.Attributes();

使用XPath查詢(需要引用using System.Xml.XPath命名空間)

var xpathQeury = root.XPathSelectElement("body/div");

獲取節(jié)點的名稱和值

   //獲取結(jié)點的名稱
    var nodeName = root.Name;
    //獲取節(jié)點的值
    var nodeValue = root.Value;

保存XML

doc.Save("demo.xml");

Linq查詢(獲取<span class="price2">¥12/人</span>節(jié)點下的值)

這里僅做示例,返回返回IEnumerable<XElement>類型的都可以進行Linq查詢

不使用XPath

 var queryResult = root.Element("body").Element("div").Elements("div").ElementAt(1).Elements("span").Where(x=>x.Attribute("class") != null && x.Attribute("class").Value == "price2").FirstOrDefault();
             if(queryResult != null)
                 Console.WriteLine(queryResult.Value);

使用XPath

 var xpathQueryResult = root.XPathSelectElements("body/div/div[2]/span").Where(x => x.Attribute("class") != null && x.Attribute("class").Value == "price2").FirstOrDefault();
             if(xpathQueryResult != null)
                 Console.WriteLine(xpathQueryResult.Value);

輸出結(jié)果都為下

下面開始介紹XPath

XPath 是 XML 文檔中查找信息的語言,使用XPath可以對XML的元素進行查找。

這里重著介紹一下XPath語法

/    從根節(jié)點開始選擇

 var xpathRoot = doc.XPathSelectElement("/html");
 var xpathRoot2 = doc.XPathSelectElement("html");

運行結(jié)果

//   獲取文檔中所有指定的結(jié)點,不管它的位置

如要獲取xml文檔中所有的span節(jié)點

             //以下獲取的結(jié)果都是一樣的
             //盡管位置不一樣,但查詢結(jié)果是一樣的
             var body = root.Element("body").Element("div").Elements("div").ElementAt(1);
             var allDivNodeInBody = body.XPathSelectElements("http://div");
             var allDivNodeInDoc = doc.XPathSelectElements("http://div");
             Console.WriteLine(allDivNodeInBody.Count());
             Console.WriteLine(allDivNodeInDoc.Count());

運行結(jié)果

.當(dāng)前節(jié)點

var currentNode = root.XPathSelectElement(".");

運行結(jié)果

..當(dāng)前節(jié)點的父節(jié)點

var parentNode = root.Element("body").XPathSelectElement("..");

運行結(jié)果

@  選取屬性

這個操作在Linq to xml里不支持,會產(chǎn)生一個"XPath 表達式的計算結(jié)果為意外類型 System.Xml.Linq.XAttribute。"異常

通配查詢 *     全部節(jié)點 @*  全部屬性(不支持)

謂詞查詢 選擇第一個查詢結(jié)果,如<span class="price1">¥62/人</span>

var firstSpanNode = doc.XPathSelectElement("http://span[1]");

運行結(jié)果

選擇最后一個查詢結(jié)果,如最后一個<span class="price4">12</span>

 var lastDivNode = doc.XPathSelectElement("http://span[last()]");
 Console.WriteLine(lastDivNode.Attribute("class").Value);

運行結(jié)果

選擇帶有屬性class的div節(jié)點

 var nodeWithClassAttribute = doc.XPathSelectElements("http://div[@class]");
             foreach (var item in nodeWithClassAttribute)
             {
                 Console.WriteLine("====================");
                 Console.WriteLine(item);
             }

運行結(jié)果

選擇帶有屬性class,且值為item-title的div節(jié)點

  var nodeWithClassValueAttribute = doc.XPathSelectElements("http://div[@class='item-title']");
             foreach (var item in nodeWithClassValueAttribute)
             {
                 Console.WriteLine(item);
             }

運行結(jié)果

簡單的選擇計算 獲取倒數(shù)第二個div節(jié)點

var nextToLastDivNode = doc.XPathSelectElement("http://div[last()-1]");

運行結(jié)果

獲取值大于10的span節(jié)點

var greaterThanTenSpan = doc.XPathSelectElements("http://span[text()>10]");

運行結(jié)果:

獲取值加10等于22的span節(jié)點

var plusTenSpan = doc.XPathSelectElements("http://span[text()+10=22]");

運行結(jié)果:

常用運行符如下

+               加

-                減

*               乘

div           除

=              等于

!=             不等于

>              大于

<              小于

>=           大于等于

<=            小于等于

or            或

and          與

組合查詢

如查詢值等于12或等于2的span節(jié)點

  var combineQuery = doc.XPathSelectElements("http://span[text()=2]|//span[text()=12]");
             foreach (var item in combineQuery)
             {
                 Console.WriteLine(item.Value);
             }

運行結(jié)果

以上就是C#使用Linq to XML進行XPath查詢的代碼實現(xiàn)的詳細內(nèi)容,更多關(guān)于C# Linq to XML進行XPath查詢的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評論

藁城市| 平泉县| 高清| 南陵县| 芜湖市| 高安市| 寻乌县| 武汉市| 光山县| 龙南县| 满城县| 股票| 凤庆县| 邢台县| 延安市| 浏阳市| 富阳市| 长阳| 普安县| 朝阳县| 白朗县| 武冈市| 台中市| 平果县| 出国| 长汀县| 凤翔县| 武邑县| 石门县| 德昌县| 陵水| 黄浦区| 崇义县| 凤山县| 马尔康县| 泰兴市| 电白县| 会东县| 酒泉市| 乌海市| 乾安县|