Wie kann ich mehrere Filter auf ein XSLT-für-jede-Anweisung?
Habe ich die folgende XSLT-Knoten:
<xsl:for-each select="Book[title != 'Moby Dick']">
....
</xsl:for-each>
Möchte ich jedoch, dass die Verwendung mehrerer Filter in der for-each -. Ich habe versucht, die folgenden, aber es scheint nicht zu funktionieren:
<!-- Attempt #1 -->
<xsl:for-each select="Book[title != 'Moby Dick'] or Book[author != 'Rowling'] ">
....
</xsl:for-each>
<!-- Attempt #2 -->
<xsl:for-each select="Book[title != 'Moby Dick' or author != 'Rowling']">
....
</xsl:for-each>
- sollten Sie eine XML-Beispiel.
- Gute Frage, +1. Siehe meine Antwort für die Erklärung und mehrere one-liner-Lösungen. 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre eigentliche Frage ist ein XPath eine: Ist es möglich, und wie, zum angeben, mehr als eine Bedingung in einem Prädikat?
Antwort:
Ja, verwenden Sie den standard-XPath-boolean-Operatoren
or
undand
und die standard-XPath-Funktionnot()
.In diesem speziellen Fall, die XPath in der
select
Attribut kann:Ich persönlich immer vorziehen würde, zu schreiben, einen gleichwertigen Ausdruck:
weil die
!=
Betreiber hat ein nicht-intuitives Verhalten, wenn einer der Operanden ist ein Knoten-set.Aber ich vermute, dass das, was Sie vermutlich wollte, war
and
die beiden comparissons-nicht zuor
Sie.!=
- operator ist ein Knoten-set (oder ein Knoten-set bzw. eine Sequenz, in XPath 2.0), dann ist es möglich, dass beide$arg1 = $arg2
und$arg1 != $arg2
sind zur selben Zeit wahr. Lesen Sie einfach die definition des!=
Betreiber. Dies wird vermieden, wenn Sienot($arg1 = $arg2)
Möchten Sie mehrere Prädikate, der einfachste Weg ist nur die Verwendung mehrerer Prädikate. Ich vermute, Sie wirklich wollen, ein "und" statt "oder":
In der Regel die != Betreiber ist am besten vermieden werden, weil es unerwartete Effekte, wenn der Autor abwesend ist, oder wenn es mehrere Autoren. Es ist besser zu schreiben:
Anscheinend habe ich vergessen zu aktualisieren meiner Daten. Versuch #2 funktioniert einwandfrei. Hoffentlich diesem Beispiel jemandem hilft.
!=
Vergleiche mit anderen Werten, die Vergleiche wurden dann oder-ed. Muss schon müde Letzte Nacht... wie auch immer, habe ich entfernt, eine ähnliche Aussage aus meiner Antwort. Danke.