2013-05-17 35 views
0

该问题涉及XPath表达式。XPath表达式

我想查找网页中所有网址长度的平均值,即指向.pdf文件。

到目前为止我已经构建下面的表达式,但它不工作:

总和(字符串长度(串(// A/@ HREF [含有( “.PDF”)] )))div count(// a/@ href [contains(。,“.pdf”)])

任何帮助将不胜感激!

+0

您正在寻找哪个XPATH版本1.0或2.0 –

+0

XPath版本不是问题:如果有人可以,他可以在两个版本中解决问题。暂时我正在使用FirePath测试表达式(在Firefox中)。 –

+1

什么意思_XPath版本不是问题_。我不认为这是1.0版本的解决方案。另外请记住,如果我没有记错的话,FirePath甚至不支持完整版本1.0(或者至少有总和问题)。 –

回答

0

您需要的XPath 2.0。

为计算字符串长度的总和,你需要或者

  • 需要的所有@href s的连接字符串适用于string-lenght($string as xs:string)(只允许一个单一的字符串作为参数),但concat(...)只需要任意数量的atomar字符串,而不是这些序列;或
  • string-length(...)作为@Navin的每个@href应用 - 但在轴步骤中使用任意函数是XPath 2.0的一项新功能。

如果使用XPath 2.0,也有功能avg(...)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 

你错过了属性的路径一步,所以你一直在努力,现在以平均链接名称的字符串长度。

+0

谢谢你的回答! –

+0

如果这回答了您的问题,您应该将其标记为(请查看每个答案左侧的复选标记)。其他用户要么回答你的问题,要么遇到同样的问题,可以很容易地识别解决方案。 –

-1

请把这样的:

sum(//a/@href[contains(.,'.pdf')]/string-length()) div count(//a/@href[contains(.,'.pdf')]) 
+0

它不起作用!感谢您的关注! –

+0

这是XPath 2.0,总结了链接文本的字符串长度而不是URL,并且在其名称的某处出现非PDF文件_containing_'.pdf'失败。 –

+0

当我找到正确的XPath 2.0工具使用时,我会再次尝试表达式。谢谢你们! –