这个问题与 XPath 表达式有关。
我想找到指向.pdf文件的网页中所有 URL 的平均长度。
到目前为止,我已经构建了以下表达式,但它不起作用:
sum(string-length(string(//a/@href[contains(., ".pdf")]))) div count(//a/@href[contains(., ".pdf")])
任何帮助将不胜感激!
您将需要 XPath 2.0。
要计算字符串长度的总和,您将需要
@href
需要一个所有s的串联字符串来应用string-lenght($string as xs:string)
(它只允许单个字符串作为参数),但concat(...)
只接受任意数量的原子字符串,而不是这些字符串的序列;或者string-length(...)
每个@href - 但是在轴步骤中使用任意函数是XPath 2.0 的一个新特性。avg(...)
如果使用 XPath 2.0 ,有一些函数ends-with(...)
可以帮助您将表达式简化为
avg(//a/@href[ends-with(., '.pdf')]/string-length())
如果您必须坚持使用 XPath 1.0,您所能做的就是使用下面的表达式来获取 URL 并计算 XPath 之外的平均值。
无论如何,您提出的子表达式将在诸如http://example.net/myfile.pdf.txt
. 仅比较URL 的结尾:
//a[@href[substring(., string-length(.) - 3) = '.pdf']]/@href
而且您错过了属性的路径步骤,因此您现在一直在尝试平均链接名称的字符串长度。
请输入如下内容:
sum(//a/@href[contains(.,'.pdf')]/string-length()) div count(//a/@href[contains(.,'.pdf')])