我正在尝试html的敏捷性包,但是很难找到正确的方法来解决这个问题。
例如:
var findclasses = _doc.DocumentNode.Descendants("div").Where(d => d.Attributes.Contains("class"));
但是,显然您可以添加比div多得多的类,所以我尝试这样做。
var allLinksWithDivAndClass = _doc.DocumentNode.SelectNodes("//*[@class=\"float\"]");
但这并不能处理这样的情况:你添加了多个类,而"float“只是其中之一。
class="className float anotherclassName"
有没有办法处理这一切?基本上,我希望选择所有具有class =且包含浮点数的节点。
**答案已记录在我的博客上,完整解释如下:Html Agility Pack Get All Elements by Class
发布于 2012-12-30 10:12:38
您可以通过在Xpath查询中使用“contains”函数来解决问题,如下所示:
var allElementsWithClassFloat =
_doc.DocumentNode.SelectNodes("//*[contains(@class,'float')]")
要在函数中重用它,请执行类似以下操作:
string classToFind = "float";
var allElementsWithClassFloat =
_doc.DocumentNode.SelectNodes(string.Format("//*[contains(@class,'{0}')]", classToFind));
发布于 2017-01-06 04:18:59
我在我的项目中经常使用这个扩展方法。希望能对你们中的某个人有所帮助。
public static bool HasClass(this HtmlNode node, params string[] classValueArray)
{
var classValue = node.GetAttributeValue("class", "");
var classValues = classValue.Split(' ');
return classValueArray.All(c => classValues.Contains(c));
}
发布于 2017-02-27 05:03:26
public static List<HtmlNode> GetTagsWithClass(string html,List<string> @class)
{
// LoadHtml(html);
var result = htmlDocument.DocumentNode.Descendants()
.Where(x =>x.Attributes.Contains("class") && @class.Contains(x.Attributes["class"].Value)).ToList();
return result;
}
https://stackoverflow.com/questions/13771083
复制相似问题