wake-up-neo.com

xpath find wenn node existiert

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

196
EddyR
<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>
312

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

69
annesley

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

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

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?
4
bcolfer

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
}
3
user324898