Die test
in <xsl:if>
Werken angegeben, als ob es die boolean
Funktion aufgerufen. Diese Funktion funktioniert nicht so, wie Sie vielleicht denken. Wenn sein Argument zu einem Node-Set ausgewertet wird (was der Fall sein wird, wenn Sie einen Pfad als sein Argument verwenden), wird es true zurückgeben, wenn das Node-Set nicht leer ist, andernfalls false. Sie testen effektiv auf die Existenz eines Elements, nicht auf seinen Wert. Wenn foo
enthält false
,
<xsl:if test="/path/to/foo">
wird immer als wahr ausgewertet, da das, was du wirklich in diesem Test gefragt ist „existiert dieses Element?“ und nicht "ist der Wert des Elements wahr?" Und das Element existiert.
Die Regel, die Boolesche Werte müssen true
, false
, 1
oder 0
ist ein Teil des XML-Schema (which see) und nicht XPath sein, die nichts über diese Regel nicht kennt. (XPath 1.0, ist, dass XPath 2.0/XQuery 1.0 hat the fn:boolean
function, die intelligent macht, also XML-Schema bewusst, Auswertung der Boolesche Werte..) Um zu bestimmen, ob ein Wert in XSLT wahr ist, haben Sie es explizit überprüfen:
<xsl:if test="/path/to/foo = 'true' or /path/to/foo = '1'">
können Sie Ihren aktuellen XPath-Ausdruck bitte mit einem XML-Fragment veröffentlichen? –
Das ist überhaupt keine Frage. Bitte geben Sie ein konkretes Beispiel an - was genau ist der XPath-Ausdruck und was ist die XML-Datei (bitte möglichst einfach), auf der dieser XPath-Ausdruck ausgewertet wird? –
Bevorzugen Sie ein Beispiel, ich denke, es gibt einen kleinen Fehler in der Syntax. –