この質問は、XPath 式に関するものです。
Web ページ内の.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(...)
@Navin Rawat が提案したように、すべての @href に適用しますが、軸ステップで任意の関数を使用することは、XPath 2.0 の新機能です。XPath 2.0 を使用している場合avg(...)
、ends-with(...)
式を
avg(//a/@href[ends-with(., '.pdf')]/string-length())
XPath 1.0 に固執する必要がある場合は、以下の式を使用して URL を取得し、XPath 以外の平均を計算するだけです。
とにかく、あなたが提案した部分式は のような URL で失敗しますhttp://example.net/myfile.pdf.txt
。URLの末尾のみを比較します。
//a[@href[substring(., string-length(.) - 3) = '.pdf']]/@href
また、属性のパス ステップを逃したため、現在、リンク名の文字列の長さを平均化しようとしています。