您的位置:首页 > Web前端 > HTML

C# HTML解析工具HtmlAgilityPack XPath 模糊查询not()函数和contains()函数

2016-10-01 11:51 651 查看
如果想使用Xpath过滤属性中含有或不含有等逻辑判断,需要以下两个函数

Xpath 的not()函数 不含后指定属性等

contains() 属性中含有指定字符串的过滤

实例说明1

//选择不包含class属性的节点
var result = node.SelectNodes(".//span[not(@class)]");
//选择不包含class和id属性的节点
var result = node.SelectNodes(".//span[not(@class) and not(@id)]");
//选择不包含class="expire"的span
var result = node.SelectNodes(".//span[not(contains(@class,'expire'))]");
//选择包含class="expire"的span
var result = node.SelectNodes(".//span[contains(@class,'expire')]");
实例2:去除指定属性和值的节点

//获取列表,去除class=all和class=tableRule 的tr节点
HtmlNodeCollection col = main.SelectNodes("//tr[not(contains(@class,'all')) and not(contains(@class,'tableRule'))]");


实例3:查找指定属性含有字符串的节点

HtmlNode name = node.SelectSingleNode("//td[contains(@class,'sName')]");


如果需要更复杂的过滤筛选可以自定义判断

另一种解析方式,假如我们需要根据div的class属性是否包含post值来提取div中的InnerText:
<div id="post-405" class="post-405 post type-post status">inner text</div>
<div id="post-105" class="post-105 post type-post status">inner text</div>
<div id="post-5" class="post-5 post type-post status">inner text</div>

可以用以下方法来提取符合条件的所有HtmlNode节点
var results = doc.DocumentNode
.Descendants("div")
.Where(x=>x.Attributes.Contains("class") &&
x.Attributes["class"].Value.Contains("post"));

提取得到节点数据之后,根据实际处理即可。

更多:

C# HTML解析工具HtmlAgilityPack使用实例(二)--Web页面 

C# HTML解析工具HtmlAgilityPack使用实例(一)

C# HTML解析工具HtmlAgilityPack使用简介
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: