C# HtmlAgilityPack Xpath判断HTML源码的某个属性是否包含或不包含指定的属性或值

C#开发 2014-09-29 15132阅读 0评论 0收藏 收藏本文
上一篇介绍了C#解析HTML网页源码的一款组件神器--HtmlAgilityPack和提取循环列表数据的方法,今天在使用中遇到了一个新的问题,结合Xpath路径来提取循环列表中的一个HTML标签的InnerText,提取的时候需要判断是这个标签的class属性是否包含某个指定的属性值,google了一下(百度搜索没有相应的结果),利用Xpath的contains可以解决,代码如下:
//选择不包含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')]");
另一种解析方式,假如我们需要根据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# HtmlAgilityPack Xpath判断HTML源码的某个属性是否包含或不包含指定的属性或值

文章评论

获取验证码