2013-05-17 3 views
0

Этот вопрос касается выражений XPath.XPath выражение

Я хочу найти среднее значение длины всех URL-адресов на веб-странице, что указывает на файл .pdf.

До сих пор я построил следующее выражение, но он не работает:

сумма (длины строки (строка (// а/@ HREF [. Содержит (".pdf")]))) ДИВ счетчик (// а/@ HREF [содержит (., ".pdf")])

Любая помощь будет оценен по достоинству!

+0

Какая версия XPATH вы ищете 1.0 или 2.0 –

+0

Версия XPath не является проблемой: если кто-то может, он может решить проблему в обеих версиях. На мгновение я тестирую выражение, используя FirePath (в Firefox). –

+1

Что должно означать, что версия _XPath не является проблемой. Я не думаю, что есть решение для этого с версией 1.0. Также имейте в виду, что Firepath даже не поддерживает полную версию 1.0 (или, по крайней мере, имеет проблемы с суммой), если я правильно помню. –

ответ

0

Вам понадобится XPath 2.0.

Для вычисления суммы длин строк, вам нужно будет либо

  • нужна каскадная строка всех @href с применить к string-lenght($string as xs:string) (который позволяет только одну строки в качестве параметра), но concat(...) только принимает произвольное число атомных строк, а не их последовательность; или
  • применять string-length(...) на каждом @href как @Navin Rawat, но использовать произвольные функции в шагах оси - это новая функция 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 

И вы пропустили шаг пути для атрибута, так что вы пытались в среднем длину строки названия ссылок прямо сейчас.

+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 для использования. Спасибо вам всем! –

Смежные вопросы