Wie können Sie mithilfe einer xpath-Abfrage feststellen, ob überhaupt ein Knoten (Tag) vorhanden ist?
Zum Beispiel, wenn ich sicherstellen wollte, dass eine Website-Seite die richtige Grundstruktur wie/html/body und/html/head/title hat
<xsl:if test="xpath-expression">...</xsl:if>
so zum Beispiel
<xsl:if test="/html/body">body node exists</xsl:if>
<xsl:if test="not(/html/body)">body node missing</xsl:if>
Versuchen Sie den folgenden Ausdruck: boolean(path-to-node)
Patrick hat Recht, sowohl bei der Verwendung von xsl:if
Als auch bei der Syntax für die Überprüfung der Existenz eines Knotens. Wie aus Patricks Antwort hervorgeht, 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 xsl:otherwise
. Patricks Beispielsyntax wird also funktionieren, aber dies ist eine Alternative:
<xsl:choose>
<xsl:when test="/html/body">body node exists</xsl:when>
<xsl:otherwise>body node missing</xsl:otherwise>
</xsl:choose>
Möglicherweise ist es besser, eine Auswahl zu treffen, Ihre Ausdrücke müssen nicht mehr als einmal eingegeben (oder möglicherweise falsch eingegeben) werden, und Sie können weiteren Verhaltensweisen folgen.
Ich verwende sehr oft count(/html/body) = 0
, da die spezifische Anzahl der Knoten interessanter ist als die Menge. Zum Beispiel ... wenn es unerwartet mehr als einen Knoten gibt, der Ihrem Ausdruck entspricht.
<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>
Ich arbeite in Ruby und mit Nokogiri hole ich das Element und schaue, ob das Ergebnis null ist.
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?
Eine Variation bei Verwendung von xpath in Java using count ():
int numberofbodies = Integer.parseInt((String) xPath.evaluate("count(/html/body)", doc));
if( numberofbodies==0) {
// body node missing
}