Freigeben über


Boolesche Ausdrücke, Vergleichsausdrücke und Set-Ausdrücke

In Filtermustern können boolesche Ausdrücke, Vergleichsausdrücke und Set-Ausdrücke enthalten sein. Die in der folgenden Tabelle aufgeführten Verknüpfungen stellen die in dieser XSLT-Implementierung (XSL Transformation) bereitgestellten alternativen Symbole dar. In dieser Dokumentation werden die Ausdrucksoperatoren behandelt.

Operator Beschreibung

and

Logisches and

or

Logisches or

not()

Negation

=

Übereinstimmung

!=

Ungleich

< *

Kleiner als

<= *

Kleiner als oder gleich

> *

Größer als

<= *

Größer als oder gleich

|

Set-Vorgang; gibt die Union zweier Knotengruppen zurück

* Erweiterte XPath-Methode

In der W3C-Syntax (World Wide Web Consortium) für Operatorschlüsselwörter werden Leerräume und andere Trennzeichen anstelle des in Version 2.5 verwendeten Dollarzeichens ($) verwendet. In der W3C-Syntax kann ein binary-Schlüsselwort mit dem Format $xxx$ als wsxxxws ausgedrückt werden, wobei ws sich auf einen Tokenterminator bezieht, der Leerraum, einfache Anführungszeichen (') oder doppelte Anführungszeichen (") darstellen kann. Unäre Operatoren, z. B. not(), verwenden eine funktionale Notation. Obwohl die Microsoft-Implementierung beide Syntaxformen unterstützt, empfiehlt es sich, für die Kompatibilität mit zukünftigen Versionen die W3C-Syntax zu verwenden.

In der folgenden Tabelle ist die Rangfolge (von höchster zu niedrigster Priorität) zwischen Vergleichsoperatoren und booleschen Operatoren dargestellt.

Rangfolge Operatoren Beschreibung

1

( )

Gruppierung

2

[ ]

Filter

3

/

//

Path-Vorgänge

4

< oder &lt;

<= oder &lt;=

> oder &gt;

>= oder &gt;=

Vergleiche

5

=

!=

Vergleiche

6

|

Union

7

not()

Boolesches not

8

And

Boolesches and

9

Or

Boolesches or

Wenn die Operatoren in einem XML-Dokument verwendet werden, z. B. in einem XSLT-Stylesheet, müssen der <-Token und der >-Token entsprechend mit einem Escapezeichen &lt; und &gt; versehen werden. In der folgenden XSLT-Anweisung wird beispielsweise eine XSLT-Vorlagenregel für alle <book>-Elemente aufgerufen, deren <price>-Element einen numerischen Wert kleiner gleich 10 aufweist.

<xsl:apply-templates select="book[price &lt;= 10]"/>

Wenn ein XPath-Ausdruck mit DOM verwendet wird, müssen die Operatoren < und > nicht mit Ecapezeichen versehen werden. In der folgenden JScript-Anweisung werden beispielsweise alle <book>-Elemente ausgewählt, deren <price>-Element über einen numerischen Wert verfügt, der kleiner gleich 10 ist.

var cheap_books = dom.selectNodes("book[price <= 10]");

Boolesche Ausdrücke können mit allen Knoten eines bestimmten Werts oder mit allen Knoten, die in bestimmten Bereichen über Knoten verfügen, übereinstimmen. Im Folgenden ist ein Beispiel für einen booleschen Ausdruck dargestellt, der false zurückgibt.

1 &gt;= 2

Bei Operatoren muss die Groß- und Kleinschreibung berücksichtigt werden.

Logisches and und logisches or

Mit den booleschen Operatoren and und or werden logische and- oder logische or-Vorgänge ausgeführt. Diese Operatoren können mit Gruppierungsklammern verwendet werden, um komplexe logische Ausdrücke zu verwenden.

Beispiele

Ausdruck Bezieht sich auf

author[degree and award]

Alle <author>-Elemente mit mindestens einem <degree>-Element und mindestens einem <award>-Element.

author[(degree or award) and publication]

Alle <author>-Elemente mit mindestens einem <degree>-Element oder <award>-Element und mindestens einem <publication>-Element.

Boolesches not

Der boolesche not-Operator negiert den Wert eines Ausdrucks in einem Filtermuster.

Beispiele

Ausdruck Bezieht sich auf

author[degree and not(publication)]

Alle <author>-Elemente mit mindestens einem <degree>-Element, jedoch ohne <publication>-Elemente.

author[not(degree or award) and publication]

Alle <author>-Elemente mit mindestens einem <publication>-Element, jedoch ohne <degree>-Elemente oder <award>-Elemente.

Beispiel

XML-Datei (test.xml)

<?xml version="1.0"?>
<test>

    <x a="1">
      <x a="2" b="B">
        <x>
          <y>y31</y>
          <y>y32</y>
        </x>
      </x>
    </x>

    <x a="2">
      <y>y2</y>
    </x>

    <x a="3">
      <y>y3</y>
    </x>

</test>

XSLT-Datei (test.xsl)

Im folgenden XSLT-Stylesheet sind alle <x>-Elemente ohne Attribute ausgewählt.

<?xml version='1.0'?>
<xsl:stylesheet version="1.0"
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method="xml" omit-xml-declaration="yes" indent="yes"/>

<!-- suppress text nodes not covered in subsequent template rule -->
<xsl:template match="text()"/>

<xsl:template match="*">
   <xsl:element name="{name()}">
      <xsl:apply-templates select="*|@*"/>
      <xsl:if test="text()">
         <xsl:value-of select="."/>
      </xsl:if>
   </xsl:element>
</xsl:template>

<xsl:template match="@*">
   <xsl:attribute name="{name()}">
      <xsl:value-of select="."/>
   </xsl:attribute>
</xsl:template>

<xsl:template match="/test">
  <xsl:apply-templates select="//x[not(@*)] "/>
</xsl:template>

</xsl:stylesheet>

Ausgabe

Die auf die XML-Datei angewendete Transformation führt zu folgendem Ergebnis:

<x>
   <y>y31</y>
   <y>y32</y>
</x>