Wie können Sie mithilfe einer xpath-Abfrage feststellen, ob überhaupt ein Knoten (Tag) vorhanden ist?
Zum Beispiel, wenn ich sicherstellen musste, dass eine Website-Seite die richtige Grundstruktur wie / html / body und / html / head / title hat
xslt
xpath
expression
EddyR
quelle
quelle
Antworten:
so zum Beispiel
quelle
html/body and not(html/body/node())
(dh testen Sie einfach, ob es vorhanden ist und keine untergeordneten Knoten oder Textknoten enthält).Versuchen Sie den folgenden Ausdruck:
boolean(path-to-node)
quelle
Patrick ist korrekt, sowohl bei der Verwendung von
xsl:if
als auch bei der Syntax zur Überprüfung der Existenz eines Knotens. Wie Patricks Antwort impliziert, gibt es jedoch kein xsl-Äquivalent zu if-then-else. Wenn Sie also eher nach einem if-then-else suchen, ist es normalerweise besser,xsl:choose
und zu verwendenxsl:otherwise
. Die Beispielsyntax von Patrick wird also funktionieren, aber dies ist eine Alternative:quelle
if-then-else
, auch was ist mitif-else if-else
? Kann ichtest="somexpath"
in davenpcjs Antwort in die 2. setzen, wann ich es machen sollif-else if-else
?Möglicherweise ist es besser, eine Auswahl zu verwenden, Ihre Ausdrücke nicht mehr als einmal eingeben (oder möglicherweise falsch eingeben) zu müssen, und Sie können weitere unterschiedliche Verhaltensweisen verfolgen.
Ich benutze sehr oft
count(/html/body) = 0
, da die spezifische Anzahl von Knoten interessanter ist als die Menge. Zum Beispiel ... wenn es unerwartet mehr als einen Knoten gibt, der Ihrem Ausdruck entspricht.quelle
count(/html/body) = 0
Genie! : DI verwenden Sie es als/html[count(/body)=0]/someNode
für die Auswahl,someNode
wann/body
(oder was auch immer) fehlt/html[count(/body)=0]
wird nie etwas auswählen, es können nicht zwei Wurzelknoten in XML sein. Vielleicht hast du gemeint/html[count(body)=0]
, was das gleiche wäre wie/html[not(body)]
oder/html[not(exists(body))]
.Ich arbeite in Ruby und mit Nokogiri hole ich das Element und schaue, ob das Ergebnis Null ist.
quelle
Eine Variation bei Verwendung von xpath in Java mit count ():
quelle