Используя запрос xpath, как определить, существует ли вообще какой-либо узел (тег)?
Например, если мне нужно убедиться, что страница сайта имеет правильную базовую структуру, такую как / html / body и / html / head / title
xslt
xpath
expression
EddyR
источник
источник
Ответы:
так например
источник
html/body and not(html/body/node())
(т.е. просто проверьте, существует ли он и не содержит ли он дочерних узлов или текстовых узлов).Попробуйте следующее выражение:
boolean(path-to-node)
источник
Патрик прав как в использовании
xsl:if
синтаксиса, так и в синтаксисе для проверки существования узла. Однако, как показывает ответ Патрика, xsl-эквивалента if-then-else нет, поэтому, если вы ищете что-то более похожее на if-then-else, вам, как правило, лучше использоватьxsl:choose
иxsl:otherwise
. Итак, пример синтаксиса Патрика будет работать, но это альтернатива:источник
if-then-else
, а как насчетif-else if-else
? В ответе davenpcj я могу поставитьtest="somexpath"
во 2-й, когда это сделатьif-else if-else
?Может быть, лучше использовать выбор, не нужно вводить (или, возможно, неправильно вводить) свои выражения более одного раза, и это позволяет вам следовать дополнительному другому поведению.
Я очень часто пользуюсь
count(/html/body) = 0
, так как конкретное количество узлов интереснее, чем множество. Например ... когда неожиданно найдется более одного узла, соответствующего вашему выражению.источник
count(/html/body) = 0
гений! : D Я использую его как/html[count(/body)=0]/someNode
для выбора,someNode
когда/body
(или что-то еще) отсутствует/html[count(/body)=0]
никогда ничего не выберет, в XML не может быть двух корневых узлов. Может быть, вы имели в виду/html[count(body)=0]
, что будет так же, как/html[not(body)]
или/html[not(exists(body))]
.Я работаю в Ruby и с помощью Nokogiri извлекаю элемент и проверяю, равен ли результат нулю.
источник
Вариант при использовании xpath в Java с использованием count ():
источник