最近在用到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);

输出结果都为下

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

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

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

  1. mysql查询本用户的表的列名等信息_mysql常用命令查询手册

    启动MySQL服务 $ sudo service mysql start 或者 /etc/init.d/mysql start 使用root用户登陆 $ mysql -u 用户名 -p 密码 查看命令 ...

  2. linq to sql 中,如何解决多条件查询问题,答案,用表达式树! (下)

    ,我们做了基于linq to sql 的多条件组合查询,但通过监视数据库发现,这样做的成本比较高,每次都要取出全部的数据到内存进行筛选.如何从真正意义上做到延迟加载,即一次只从数据库中取我们需要的用到 ...

  3. 查询字符串中字母出现的个数

    /*查询字符串中字母出现的个数*/             string str = " Welcom Hello World";             Dictionary&l ...

  4. 在LINQ to SQL中使用Translate方法以及修改查询用SQL

    目前LINQ to SQL的资料不多--老赵的意思是,目前能找到的资料都难以摆脱"官方用法"的"阴影".LINQ to SQL最权威的资料自然是MSDN,但是M ...

  5. 使用LINQ更新集合中的所有对象

    有没有办法使用LINQ执行以下操作? foreach (var c in collection) {c.PropertyToSet = value; } 为了澄清,我想遍历集合中的每个对象,然后更新每 ...

  6. 4.Ling初体验 匿名类型在查询表达式中的使用

    定义:  匿名类型是指包括一个或多个公共属性的类类型, 它提供了将查询结果临时组合在一起的捷径,从而不需要为每个查询结果集合指定一个有名称了类型. 在LINQ中,匿名类型广泛使用与查询表达式中的sel ...

  7. 【转】 LINQ TO SQL中的selectMany

    首先看SelectMany的定义: Queryable中的SelectMany 方法:将序列的每个元素投影到一个 IEnumerable<(Of <(T>)>) 并将结果序列组 ...

  8. arrays中copyof复制两个数组_异或的魅力!图解「数组中两个数的最大异或值」

    今天分享的题目来源于 LeetCode 第 421 号问题:数组中两个数的最大异或值.在 异或 这个知识点里面属于一个中高难度的题目. 题目描述 给定一个非空数组,数组中元素为 a0, a1, a2, ...

  9. LeetCode 421. 数组中两个数的最大异或值

    421. 数组中两个数的最大异或值 Idea 假设选择了数组中的元素ai和aj使得它们达到最大按位异或结果x:x=ai⊕ajx=a_{i}⊕a_{j}x=ai​⊕aj​,其中⊕表示按位异或运算. 根据 ...

最新文章

  1. AI一分钟 | 浙大研发出“踢不倒”的四足机器人;富士康冲击A股上市,AI为最大卖点
  2. 读书笔记《单核工作法》_5:适用xing
  3. java对象间的转型,详细讲述Java中的对象转型
  4. Windows Mobile 模拟器网络连接设置
  5. 一条SQL的奇妙旅行
  6. 解决问题的能力 > 10倍程序员
  7. mac版docker配置加速
  8. 提示java不是内部命令_Win7命令窗口提示“javac不是内部或外部命令”怎么解决?...
  9. UE4蓝图节点不同颜色代表
  10. 光纤通信是不是计算机类的,光纤通信专业属于什么门类
  11. 浅谈网银USB key使用原理与安全策略
  12. java docx4j 工具和xdocreport工具创建PDF或者word报表
  13. 聊聊DevOps制品管理-不止是存储制品这么简单
  14. 在ubuntu中使用7z压缩命令分卷压缩超大文件
  15. bim学习—— 第7章 放置幕墙门窗
  16. Mysql中FROM_UNIXTIME()和UNIX_TIMESTAMP()函数
  17. 百度深度学习框架paddlepaddle实战三——自家车牌识别
  18. 三菱PLC QD77定位模块功能块FB ,用私服电机控制中
  19. 2010-2015年笔记本专题研究及投资可行性评估报告
  20. 【小甲鱼C语言】课后笔记第一章第九节——if语句

热门文章

  1. 循环队列的java结构_Java数据结构——循环队列
  2. 语言速算24点的小窍门_期末备考:小学数学期末常考题型汇总+速算解题思路分析...
  3. c语言可变入参中的每个参数的类型可以不同,编程入门:浅谈C语言的可变参数
  4. Python机器学习---何为机器学习?
  5. java.lang.ClassNotFoundException: Cannot find class: com.mysql.jdbc.Driver解决办法
  6. 阿米洛无法打开蓝牙模式_企业为什么要学习阿米巴模式?
  7. 图神经网络(一)图信号处理与图卷积神经网络(1)矩阵乘法的三种方式
  8. 足球赛事分组代码PHP,PHP数组分组排序程序代码
  9. 【算法竞赛学习】资金流入流出预测-挑战Baseline_建模预测
  10. linux下的shell运算(加、减、乘、除)