.net HTML解析工具HtmlAgilityPack使用


HtmlAgilityPack 官网:parser | Html Agility Pack (html-agility-pack.net)

 

XPath路径表达式

用来选取XML文档中的节点或节点集的

1、术语:节点(Node):7种类型:元素,属性,文本,命名空间,处理命令,注释,文档(根)节点
2、节点关系:父(Parent),子(Children),同胞(Sibling),先辈(Ancestor),后代(Descendant)
3、路径表达式

nodename  节点名,选取此节点的所有子节点  例: childnode  当前节点中的childnode子节点,不包含孙子及以下的节点

      /     从根节点选取  例:/root/childnode/grandsonnode  

       //     表示所有后代节点  例://childnode    所有名为childnode的后代节点

      .    表示当前节点  例:  ./childnode    表示当前节点的childnode节点

      ..     表示父节点  例:  ../nearnode     表示父亲节点的nearnode子节点

       @    选取属性  /root/childnode/@id     表示childnode的所有含有id属性的节点集

 

li_node.SelectSingleNode("//img") 代表查询出整个页面所有的img标签,和当前li_node标签无关

li_node.SelectNodes("div//img") 代表查询当前节点li_node下面div中所有的img标签,节点报含

  4、谓语(Predicates)

    谓语可以对节点集进行一些限制,使选择更精确

      /root/book[1]    节点集中的第一个节点

      /root/book[last()]  节点集中最后一个节点

      /root/book[position() - 1]  节点集中倒数第二个节点集

      /root/book[position() < 5]  节点集中前五个节点集

      /root/book[@id]      节点集中含有属性id的节点集

      /root/book[@id='chinese']  节点集中id属性值为chinese的节点集

      /root/book[price > 35]/title  节点集中book的price元素值大于35的title节点集

  5、通配符:XPath路径中同样支持通配符(*,@*,node(), text())

    例:  /bookstore/*

        //title[@*]

  6、XPath轴

    定义相对于当前节点的节点集

      ancestor    所有祖先节点

      attribute    所有属性节点

      child      所有子元素

      descendant  所有后代节点(子,孙。。。)

      following    结束标记后的所有节点      preceding   开始标记前的所有节点

      following-sibling  结束标记后的所有同胞节点

      preceding-sibling  开始标记前的所有同胞节点

      namespace   当前命名空间的所有节点

      parent     父节点

      self       当前节点

    用法:轴名称::节点测试[谓语]

      例:  ancestor::book

            child::text()

  7、运算符

    |  两个节点集的合并  例:/root/book[1] | /root/book[3]

    +,-,*,dev,mod

    =,!=,<,>,<=,>=

 

    or,and  或和与

 

 

我知道如何获取相同CSS类的DIV列表,例如

<div class="class1">1</div>
<div class="class1">2</div>


使用xpath //div[@class='class1']
但是,如果div有多个类,例如

<div class="class1 class2">1</div>

使用
//div[contains(@class, 'class1') and contains(@class, 'class2')]

 

补充:

多个属性条件查询      //div[@align='center' and @height='24']

  不存在class属性       //div[not(@class)]


示例:
html文本:
<li class="tab-trigger active"></li> <!-- 1 -->
<li class="tab-trigger"></li>  <!-- 2 -->
<li class="tab-trigger"></li>  <!-- 3 -->
<li class="tab-trigger"></li>  <!-- 4 -->
<li class="tab-trigger last-col"></li>  <!-- 5 -->
node_content.SelectNodes("li[@class=\"tab-trigger\"]")
得到第 2,3,4三个元素

node_content.SelectNodes("li[contains(@class,\"tab-trigger\")]")
得到 1,2,3,4,5五个元素

node_content.SelectNodes("li[contains(@class,\"active\")]")
得到 1 一个元素

node_content.SelectNodes("li[not(contains(@class,\"active\"))]")
得到 2,3,4,5四个元素

node_content.SelectNodes("li[not(contains(@class,\"last-col\"))]")
得到 1,2,3,4四个元素


 

版权声明:本文为YES开发框架网发布内容,转载请附上原文出处连接
YES开发框架
上一篇:.netcore 打开SQLite数据库失败:You need to call SQLitePCL.raw.SetProvider(). If you are using a bundle package, this is done by calling SQLitePCL.Batteries.Init().”
下一篇:Devexpress表格主从表
评论列表

发表评论

评论内容
昵称:
关联文章

.net HTML解析工具HtmlAgilityPack使用
Python使用html解析包Requests-html运行py文件没问题,Pyinstaller打包exe后运行报错
Python爬虫解析网页的提取html信息的常用方式
使用 WPF 做个 PowerPoint 系列 基于 OpenXML 解析实现 PPT 文本描边效果
.NET中大型项目开发必备(6)--IUtility工具介绍
RazorEngine不能使用@Html.Raw引起的连锁反应以及解决办法
.NETCore和.NET5 MVC解析获取appsettings.json数据
.NETCore动态解析Razor代码cshtml代码解析RazorEngine.NetCore
支付宝:联调排查工具使用介绍
ASP.NET Core MVC 在过滤器ActionFilter中保存页面的生成的html静态页面文件
在ASP.NET Core web API中使用Swagger/OpenAPI(Swashbuckle)
asp.net core MVC路由添加.html伪静态url时报错
html发布到服务器后部分jpg报错:net::ERR_BLOCKED_BY_CLIENT
C# 解析加载读取XML文件的正确姿势
html+js上传文件
MSSQL卸载工具
SEO刷排名工具参数配置指南
.NET中大型项目开发必备(12)--使用MQ消息队列
使用.NET 6开发TodoList应用(26)——实现Configuration和Option的强类型绑定
FastReport完全破解--asp.net使用签名问题

联系我们
联系电话:15090125178(微信同号)
电子邮箱:garson_zhang@163.com
站长微信二维码
微信二维码