Подтвердить что ты не робот

Xpath найти, если node существует

Используя запрос xpath, как вы обнаруживаете, существует ли node (тег)?

Например, если мне нужно убедиться, что страница сайта имеет правильную базовую структуру, например /html/body и/html/head/title

4b9b3361

Ответ 1

<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>

Ответ 2

Попробуйте следующее выражение: boolean(path-to-node)

Ответ 3

Патрик прав, как при использовании 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 символов)

Ответ 4

Может быть, лучше использовать выбор, не нужно печатать (или, возможно, ошибочно) ваши выражения более одного раза, и позволяет вам следить за дополнительными поведением.

Я очень часто использую 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>

Ответ 5

Я работаю в 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?

Ответ 6

Вариант при использовании xpath в Java с помощью count():

int numberofbodies = Integer.parseInt((String) xPath.evaluate("count(/html/body)", doc));
if( numberofbodies==0) {
    // body node missing
}