Usando uma consulta xpath, como você descobre se existe um nó (tag)?
Por exemplo, se eu precisasse garantir que uma página de site tivesse a estrutura básica correta, como / html / body e / html / head / title
xslt
xpath
expression
EddyR
fonte
fonte
Respostas:
então por exemplo
fonte
html/body and not(html/body/node())
(ou seja, apenas teste se existe e se não contém nós filhos ou nós de texto).Tente a seguinte expressão:
boolean(path-to-node)
fonte
Patrick está correto, tanto no uso de
xsl:if
quanto na sintaxe para verificar a existência de um nó. No entanto, como a resposta de Patrick implica, não há xsl equivalente a if-then-else, portanto, se você está procurando algo mais como um if-then-else, normalmente é melhor usarxsl:choose
exsl:otherwise
. Portanto, a sintaxe de exemplo de Patrick funcionará, mas esta é uma alternativa:fonte
if-then-else
, e tambémif-else if-else
? Na resposta de davenpcj posso colocartest="somexpath"
no 2º quando fazê-loif-else if-else
?Pode ser melhor usar uma opção, não precisar digitar (ou possivelmente digitar incorretamente) suas expressões mais de uma vez e permitir que você siga comportamentos diferentes adicionais.
Eu costumo usar
count(/html/body) = 0
, pois o número específico de nós é mais interessante que o conjunto. Por exemplo ... quando houver inesperadamente mais de um nó que corresponda à sua expressão.fonte
count(/html/body) = 0
gênio! : DI usá-lo como/html[count(/body)=0]/someNode
para selecionarsomeNode
quando/body
(ou qualquer outro) está faltando/html[count(/body)=0]
nunca selecionará nada, não pode haver dois nós raiz no XML. Talvez você quis dizer/html[count(body)=0]
, o que seria o mesmo que/html[not(body)]
, ou/html[not(exists(body))]
.Eu trabalho em Ruby e usando Nokogiri eu pego o elemento e procuro ver se o resultado é nulo.
fonte
Uma variação ao usar xpath em Java usando count ():
fonte