如何使用 HTML Agility Pack 查找以特定值开头的属性?
How do I find attributes starting with a specific value using HTML Agility Pack?
我试图在 HTML 文档中查找以特定值开头的任何属性。我似乎对此有一个有效的 XPath 查询,但是在使用 HTML Agility Pack 时 returns 什么都没有。
我知道我可以使用 Linq,但我正在尝试重用现有功能并利用 XPath 查询。
示例HTML
<!DOCTYPE html>
<html>
<head>
<title>Title</title>
</head>
<body>
<p>Loren ipsum</p>
<a href="http://www.myurl.com" onclick="myFunction()"></a>
</body>
</html>
XPath 查询
//*/@*[starts-with(name(), 'on')]
这可以使用 HTML Agility Pack 吗?
您的 XPath 表达式是正确的。将您显示的文档片段作为输入,结果为
onclick="myFunction()"
所以,是的,这绝对是可能的,这里的 XPath 没有问题,问题出在其他地方。也许你可以展示调用表达式的代码?你用SelectSingleNode()
吗?
使用 HtmlAgilityPack (HAP) 和 XPath 函数 name()
对我不起作用,但是用 local-name()
替换 name()
就可以了:
//*/@*[starts-with(local-name(), 'on')]
然而,SelectSingleNode()
和SelectNodes()
都只能returnHtmlNode
(s)。当 XPath 表达式选择属性而不是节点时,属性的所有者节点将被 returned。所以最后还是需要通过XPath之外的一些选项来获取属性,例如:
HtmlDocument doc;
......
var link = doc.DocumentNode
.SelectSingleNode("//*/@*[starts-with(local-name(), 'on')]");
var onclick = link.Attributes
.First(o => o.Name.StartsWith("on"));
我试图在 HTML 文档中查找以特定值开头的任何属性。我似乎对此有一个有效的 XPath 查询,但是在使用 HTML Agility Pack 时 returns 什么都没有。
我知道我可以使用 Linq,但我正在尝试重用现有功能并利用 XPath 查询。
示例HTML
<!DOCTYPE html>
<html>
<head>
<title>Title</title>
</head>
<body>
<p>Loren ipsum</p>
<a href="http://www.myurl.com" onclick="myFunction()"></a>
</body>
</html>
XPath 查询
//*/@*[starts-with(name(), 'on')]
这可以使用 HTML Agility Pack 吗?
您的 XPath 表达式是正确的。将您显示的文档片段作为输入,结果为
onclick="myFunction()"
所以,是的,这绝对是可能的,这里的 XPath 没有问题,问题出在其他地方。也许你可以展示调用表达式的代码?你用SelectSingleNode()
吗?
使用 HtmlAgilityPack (HAP) 和 XPath 函数 name()
对我不起作用,但是用 local-name()
替换 name()
就可以了:
//*/@*[starts-with(local-name(), 'on')]
然而,SelectSingleNode()
和SelectNodes()
都只能returnHtmlNode
(s)。当 XPath 表达式选择属性而不是节点时,属性的所有者节点将被 returned。所以最后还是需要通过XPath之外的一些选项来获取属性,例如:
HtmlDocument doc;
......
var link = doc.DocumentNode
.SelectSingleNode("//*/@*[starts-with(local-name(), 'on')]");
var onclick = link.Attributes
.First(o => o.Name.StartsWith("on"));