XPath 3.0, XPath 2.0, XPath 1.0 / XPath-Funktionen / XPath: Sequenz-Funktionen / Der Vergleich von leeren Sequenzen mit leeren Strings

Der Vergleich von leeren Sequenzen mit leeren Strings

Der Vergleich von leeren Sequenzen mit leeren Strings

➪ Der Vergleich von leeren Sequenzen mit leeren Elementen liefert immer false(). Um eine Vergleichbarkeit herzustellen, ist eine string-Konvertierung der Sequenz beziehungsweise des Elements hilfreich.

Ein bemerkenswertes Thema ist der Vergleich leerer Sequenzen mit leeren Strings, der in jedem Fall false() ergibt. Das heißt: leereSequenz ist gleich leererString ergibt false. leereSequenz ist nicht gleich leererString ergibt ebenso false.

Definieren Sie zwei Variablen v1 und v2.


<xsl:variable name="v1">
    <ROOT><wert1></wert1></ROOT>
</xsl:variable>
<xsl:variable name="v2">
    <WURZEL></WURZEL>
</xsl:variable>

Wird geprüft, ob $v1 und $v2 gleich sind, dann ist das ebenso false() wie die Prüfung, ob $v1 und $v2 NICHT gleich sind.

Will man die Prüfung aussagekräftig durchführen, so lohnt sich ein Casting der Werte auf string:


<xsl:template match="/">
    <ergebnis>
        <xsl:choose>
            <xsl:when 
                test="string($v1/ROOT/wert1) 
                = string($v2/WURZEL/wert2)">OK</xsl:when>
            <xsl:otherwise>NOT OK</xsl:otherwise>    
        </xsl:choose>
    </ergebnis>
</xsl:template>

Hier lautet das Ergebnis "OK".

Eine Prüfung auf xs:string liefert dagegen "NOT OK" (vgl. ).


<xsl:template match="/">
    <ergebnis>
        <xsl:choose>
            <xsl:when 
                test="xs:string($v1/ROOT/wert1) 
                = xs:string($v2/WURZEL/wert2)">
                OK
            </xsl:when>
            <xsl:otherwise>NOT OK</xsl:otherwise>    
        </xsl:choose>
    </ergebnis>
</xsl:template>

Dasselbe "NOT OK" erhalten Sie auch bei


<xsl:when 
    test="xs:string($v1/ROOT/wert1) 
    != xs:string($v2/WURZEL/wert2)">
    OK
</xsl:when>

Alternativ können Sie es mit der -Funktion versuchen:


<xsl:choose>
  <xsl:when 
       test="deep-equal($v1, $v2)">OK</xsl:when>
  <xsl:otherwise>NOT OK</xsl:otherwise>
</xsl:choose>

wg / 13. April 2018



Fragen? Anmerkungen? Tipps?

Bitte nehmen Sie Kontakt zu mir auf.






Vielen Dank für Ihr Interesse an meiner Arbeit.


V.i.S.d.P.: Wilfried Grupe * Klus 6 * 37643 Negenborn

☎ 0151. 750 360 61 * eMail: info10@wilfried-grupe.de

www.wilfried-grupe.de/vergleich_leere_Sequenz_leerstring.html