Используя запрос xpath, как вы обнаруживаете, существует ли node (тег)?
Например, если мне нужно убедиться, что страница сайта имеет правильную базовую структуру, например /html/body и/html/head/title
Используя запрос xpath, как вы обнаруживаете, существует ли node (тег)?
Например, если мне нужно убедиться, что страница сайта имеет правильную базовую структуру, например /html/body и/html/head/title
<xsl:if test="xpath-expression">...</xsl:if>
например,
<xsl:if test="/html/body">body node exists</xsl:if>
<xsl:if test="not(/html/body)">body node missing</xsl:if>
Попробуйте следующее выражение: boolean(path-to-node)
Патрик прав, как при использовании xsl:if
, так и в синтаксисе для проверки существования node. Однако, как следует из ответа Патрика, нет xsl-эквивалента if-then-else, поэтому, если вы ищете что-то более похожее на if-then-else, вам обычно лучше использовать xsl:choose
и xsl:otherwise
. Итак, синтаксис примера Патрика будет работать, но это альтернатива:
<xsl:choose>
<xsl:when test="/html/body">body node exists</xsl:when>
<xsl:otherwise>body node missing</xsl:otherwise>
</xsl:choose>
(отредактировано не менее 6 символов)
Может быть, лучше использовать выбор, не нужно печатать (или, возможно, ошибочно) ваши выражения более одного раза, и позволяет вам следить за дополнительными поведением.
Я очень часто использую count(/html/body) = 0
, поскольку конкретное количество узлов более интересно, чем набор. Например... когда неожиданно более 1 node соответствует вашему выражению.
<xsl:choose>
<xsl:when test="/html/body">
<!-- Found the node(s) -->
</xsl:when>
<!-- more xsl:when here, if needed -->
<xsl:otherwise>
<!-- No node exists -->
</xsl:otherwise>
</xsl:choose>
Я работаю в Ruby и, используя Nokogiri, я извлекаю элемент и смотрю, есть ли результат nil.
require 'nokogiri'
url = "http://somthing.com/resource"
resp = Nokogiri::XML(open(url))
first_name = resp.xpath("/movies/actors/actor[1]/first-name")
puts "first-name not found" if first_name.nil?
Вариант при использовании xpath в Java с помощью count():
int numberofbodies = Integer.parseInt((String) xPath.evaluate("count(/html/body)", doc));
if( numberofbodies==0) {
// body node missing
}