gpt4 book ai didi

c# - HtmlAgilityPack SelectNodes 表达式忽略具有特定属性的元素

转载 作者:太空狗 更新时间:2023-10-29 21:34:56 24 4
gpt4 key购买 nike

我正在尝试从脚本节点和具有名为“relativeNav”的类的 ul 中选择节点。有人可以指导我走正确的道路吗?我一直在寻找这个一周,但我无法在任何地方找到它。目前我有这个,但它显然也选择了//ul[@class='relativeNav'] 。无论如何,是否要放置一个 NOT 表达式,以便 SelectNode 忽略那个?

        foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//body//*[not(self::script)]/text()"))
{
Console.WriteLine("Node: " + node);
singleString += node.InnerText.Trim() + "\n";
}

最佳答案

给定一个 Html 文档,其结构类似于:

<html>
<head><title>HtmlDocument</title>
</head>
<body>
<div>
<span>Hello Span World</span>
<script>
Script Text
</script>
</div>
<ul class='relativeNav'>
<li>Hello </li>
<li>Li</li>
<li>World</li>
</ul>
</body>
</html>

以下 XPath 表达式将选择所有不是脚本元素的节点,不包括类为“relativeNav”的 UL 元素的所有子元素:

var nodes = htmlDoc.DocumentNode.SelectNodes("//body//*[not(parent::ul[@class='relativeNav']) and not(self::script)]/text()");

更新:忘记提及,如果您需要排除 ul[class='relativeNav'] 的任何子级,而不管它们的深度如何,您应该使用:

"//body//*[not(ancestor::ul[@class='relativeNav']) and not(self::script)]/text()"

如果您还想排除 ul 元素(在上面的示例中有点不相关,因为该元素不包含文本)您应该指定:

"//body//*[not(ancestor-or-self::ul[@class='relativeNav']) and not(self::script)]"

关于c# - HtmlAgilityPack SelectNodes 表达式忽略具有特定属性的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13225438/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com