如何使用XPath返回函数的结果?

时间:2009-09-03 11:25:33

标签: xpath

我是使用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)

4 个答案:

答案 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]的结果,完全取决于您计划使用查询的语言。