Używając zapytania xpath, jak sprawdzić, czy w ogóle istnieje węzeł (znacznik)?
Na przykład, jeśli muszę upewnić się, że strona internetowa ma poprawną podstawową strukturę, taką jak / html / body i / html / head / title
xslt
xpath
expression
EddyR
źródło
źródło
Odpowiedzi:
więc na przykład
źródło
html/body and not(html/body/node())
(tj. Po prostu sprawdź, czy istnieje i nie zawiera żadnych węzłów podrzędnych ani węzłów tekstowych).Wypróbuj następujące wyrażenie:
boolean(path-to-node)
źródło
Patrick ma rację, zarówno w użyciu
xsl:if
, jak i w składni do sprawdzania istnienia węzła. Jednak, jak sugeruje odpowiedź Patryka, nie ma żadnego odpowiednika xsl dla „jeśli-to-inaczej”, więc jeśli szukasz czegoś bardziej podobnego do „jeśli-to-inaczej”, zwykle lepiej jest użyćxsl:choose
ixsl:otherwise
. Tak więc przykładowa składnia Patricka będzie działać, ale jest to alternatywa:źródło
if-then-else
, a co z tegoif-else if-else
? Czy w odpowiedzi davenpcj mogę umieścićtest="somexpath"
na drugim miejscu, kiedy to zrobićif-else if-else
?Być może lepiej będzie skorzystać z wyboru, nie musisz wpisywać (lub być może pomylić) swoich wyrażeń więcej niż jeden raz i pozwala ci śledzić dodatkowe różne zachowania.
Bardzo często używam
count(/html/body) = 0
, ponieważ konkretna liczba węzłów jest bardziej interesująca niż zestaw. Na przykład ... gdy nieoczekiwanie jest więcej niż 1 węzeł pasujący do Twojego wyrażenia.źródło
count(/html/body) = 0
geniusz! : DI używam go/html[count(/body)=0]/someNode
do wybierania,someNode
kiedy/body
(lub cokolwiek) brakuje/html[count(/body)=0]
nigdy niczego nie wybierze, w XML nie mogą znajdować się dwa węzły główne. Może miałeś na myśli/html[count(body)=0]
, co byłoby takie samo jak/html[not(body)]
lub/html[not(exists(body))]
.Pracuję w Ruby i za pomocą Nokogiri pobieram element i sprawdzam, czy wynik jest zerowy.
źródło
Odmiana przy użyciu xpath w Javie przy użyciu count ():
źródło