xslt prüfen - xpath find wenn ein Knoten existiert




ob element (6)

Eine Variante bei Verwendung von xpath in Java mit count ():

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

Wie finden Sie bei einer xpath-Abfrage, ob überhaupt ein Knoten (tag) existiert?

Zum Beispiel, wenn ich sicherstellen wollte, dass eine Webseite die korrekte Grundstruktur wie / html / body und / html / head / title hat


Probieren Sie den folgenden Ausdruck aus: boolean(path-to-node)


Ich arbeite in Ruby und benutze Nokogiri. Ich hole das Element und schaue nach, 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?

Patrick hat Recht, sowohl in der Verwendung von xsl:if als auch in der Syntax zur Überprüfung der Existenz eines Knotens. Wie Patrick's Antwort jedoch andeutet, gibt es 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 . Also funktioniert die Beispielsyntax von Patrick, aber das ist eine Alternative:

<xsl:choose>
 <xsl:when test="/html/body">body node exists</xsl:when>
 <xsl:otherwise>body node missing</xsl:otherwise>
</xsl:choose>

Es könnte besser sein, eine Auswahl zu verwenden, Sie müssen Ihre Ausdrücke nicht mehr als einmal eingeben (oder möglicherweise falsch eingeben), und Sie können weitere unterschiedliche Verhaltensweisen verfolgen.

Ich benutze 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 mit Ihrem Ausdruck übereinstimmt.

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

//foo/bar[100 <= position() and position() < 200]




xslt xpath expression