用linq查询html中div个数,C#使用Linq to XML进行XPath查询

最近在用到HtmlAgliltyPack进行结点查询时,发现这里选择结点使用的是XPath。所以这里总结一下在C#中使用XPath查询XML的方式。习惯了用Linq,这里也是用的Linq to xml的。

Linq To XML的核心类是XDocument和XElement、XAttribute,下面简单介绍一下使用。需要引用using System.Xml.Linq命名空间

这三个类简单理解为:

XDocument:打开的整个XML文档

XElement:节点元素

XAttribute:属性

如有以下XML文件

测试XML

汪家羊肉馆

¥62/人

¥12/人

打开XML文件

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

获取根节点(html节点 返回XElement类型)

var root = doc.Root;

获取第一个子节点(返回XElement类型)

1 var firstNode = root.FirstNode;

获取全部子节点(返回IEnumerable)

1 var allChildNode = root.Nodes();

获取指定名称的第一个子节点(返回XElement类型)

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

获取指定名称的全部子节点(返回IEnumerable)

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

获取节点指定名称的属性(

 )

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

获取节点的全部属性

1 var allAttributes = root.Attributes();

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

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

获取节点的名称和值

1   //获取结点的名称

2 var nodeName = root.Name;

3 //获取节点的值

4 var nodeValue = root.Value;

保存XML

1 doc.Save("demo.xml");

Linq查询(获取¥12/人节点下的值)

这里仅做示例,返回返回IEnumerable类型的都可以进行Linq查询

不使用XPath

1 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();

2 if(queryResult != null)

3 Console.WriteLine(queryResult.Value);

使用XPath

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

2 if(xpathQueryResult != null)

3 Console.WriteLine(xpathQueryResult.Value);

输出结果都为下

638ba43dee969fd0d8645dbecd05435e.png

标签:XML,XPath,C#,Linq,var,root,节点

来源: https://www.cnblogs.com/zhaotianff/p/11319871.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值