我是使用XPath的新手,所以我一直在使用XPath Evaluator,我正试图找出如何返回函数的值。
如果我想返回页面上所有链接的href
,我可以使用以下XPath:
//a/@href
如果我想返回href
超过20个字符的所有链接,我可以使用它:
//a[string-length(@href) > 20]
我无法弄清楚我如何得到所有href
的长度?
我天真的假设是应该这样做:
//a/string-length(@href)
但它失败了(我能想到的所有变化都是如此)。
如何做到这一点?
在进一步挖掘之后,我看到XPath评估器我使用硬编码XPathResult.ORDERED_NODE_SNAPSHOT_TYPE
作为结果类型,当我将其更改为ANY_TYPE
(0)时,以下工作用于获取一个链接的长度(这是我实际需要的)
string-length((//a)[1]/@href)
答案 0 :(得分:1)
XPath主要用于选择不返回标量值的节点。 XPath中标量函数的存在有助于创建谓词条件,并且可以在XSLT中用于提供输出值。但是,大多数支持XPath的DOM实现仅支持所选节点的返回。
答案 1 :(得分:1)
您正在尝试查找多个字符串的长度。我可以想到两种可行的方法:
尝试将该函数放在查询路径之外。现在我猜它失败了因为你说“转到这个节点”并且节点的一部分是一个函数。试试这个:
string-length(//a/@href)
但我仍然认为你不会得到你想要的东西,这是每个URL的长度。我可能是错的,但为了以防万一,您可能需要先考虑查找所有href,然后循环结果并使用函数来获取每个href的长度。像
这样的东西urls = //a/@href
foreach (urls as url) {
if (string-length(url) > 20)
....blah blah blah....
}
您可能正在尝试避免循环,但获取所有href然后使用条件可能几乎同样有效。
答案 2 :(得分:0)
你做不到。函数用于进一步指定所需的节点(即我想要所有tt
- 具有3个以上属性的节点。)但是,由于xpath查询通常会返回节点对象,因此您可以使用您所使用的语言轮询其属性。重新使用xpath。
答案 3 :(得分:0)
您需要循环查看//a[string-length(@href) > 20]
的结果,完全取决于您计划使用查询的语言。