XPath: Использование строковых функций в наборе узлов? - PullRequest
0 голосов
/ 21 мая 2019

Мне интересно, возможно ли использовать строковые функции в наборе узлов, в частности, в файле XPath 1.0 используется функция 'substring ()'.

На странице, с которой я собираю детали, есть набор узловиз 5 URL-адресов, которые возвращаются со следующим путем расположения XPath:

//div[@class='titles cf']/a[not(contains(div,'Sold'))]/@href

К сожалению, URL-адреса имеют формат «//www.example.com» - они нужны мне на «www.example.com»формат (без начальных слешей).Я пытался:

substring(//div[@class='example example-1']/a[not(contains(div,'Sold'))]/@href, 3)

Однако, это только возвращает 1 результат.Мне нужно все 5 вернуть без начальных слешей.Я предполагаю, что вы не можете использовать этот тип строковой функции на множестве узлов, но надеетесь, что кто-то сможет пролить свет на это и помочь мне достичь желаемого результата, пожалуйста?

Если есть альтернативные методы достижениятот же результат, тогда я все уши тоже.

Спасибо

1 Ответ

0 голосов
/ 21 мая 2019

Нет способа обработать каждый элемент произвольного списка или набора узлов с помощью функции в чистом XPath 1, поэтому вам нужно будет перейти к языку хоста, с которым вы используете XPath, чтобы обрабатывать различные узлы по отдельности и вызыватьфункция подстроки для каждого элемента из основного языка (например, XSLT <xsl:for-each select="/div[@class='titles cf']/a[not(contains(div,'Sold'))]/@href"><xsl:value-of select="substring(., 3)"/></xsl:for-each>).

В XPath 2 и более поздних версиях вы можете использовать либо вызов функции в качестве последнего шага, например /div[@class='titles cf']/a[not(contains(div,'Sold'))]/@href/substring(., 3), либо использование for .. return выражение, например for $href in /div[@class='titles cf']/a[not(contains(div,'Sold'))]/@href return substring($href, 3), но в чистом XPath такой опции нет.

Конечно, если вы знаете, что у вас есть пять элементов, то это зависит от того, как вы используете XPath (основной язык или инструмент).Вы можете использовать пять выражений пути, например substring((/div[@class='titles cf']/a[not(contains(div,'Sold'))]/@href)[1], 3), substring((/div[@class='titles cf']/a[not(contains(div,'Sold'))]/@href)[2], 3) и т. д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...