XPath 3.0, XPath 2.0, XPath 1.0 / XPath-Funktionen / XPath: Sequenz-Funktionen / XPath Sequenzen: concat, union, except, intersect

XPath Sequenzen: concat, union, except, intersect

XPath Sequenzen: concat, union, except, intersect

➪ Ab XSLT/XPath 2.0 sind Sequenzen äußerst leistungsfähig, nicht zuletzt durch die Möglichkeiten der Mengenoperationen: concat, union, except, intersect.

Auf dieser Seite:

Nehmen Sie als Beispiel zwei Variablen, die beide Sequenzen einzelner Nodes umfassen. Die erste Variable "v1" umfasst die beiden Ort-Nodes 1 und 2 mit all deren Childnodes. Mit dem Komma-Operator wurden die beiden Ort-Nodes verkettet. Die Variable "v2" umfasst dagegen die beiden Ort-Nodes 2 und 3. Es gibt also eine Überschneidung bei Ort[2].


<xsl:variable name="v1" select="//Ort[1], //Ort[2]"/>
<xsl:variable name="v2" select="//Ort[2], //Ort[3]"/>

Sequenzen verketten

Mit dem Komma "," können Sie Sequenzen verketten.


<CONCAT>
  <xsl:for-each select="$v1, $v2">
    <ortname><xsl:value-of select="name"/></ortname>
  </xsl:for-each>
</CONCAT>

Resultat:


<ortname>Neustadt</ortname>
<ortname>Darmstadt</ortname>
<ortname>Darmstadt</ortname>
<ortname>Kapstadt</ortname>

Sequenzen vereinigen

Mit union oder auch "|" können Sie Sequenzen vereinigen. Dabei werden Überschneidungen wie bei Ort[2] vermieden.


<UNION>
  <xsl:for-each select="$v1 | $v2">
 <ortname><xsl:value-of select="name"/></ortname>
  </xsl:for-each>
</UNION>

Alternative: Arbeiten mit union.


<UNION>
  <xsl:for-each select="$v1 union $v2">
    <ortname><xsl:value-of select="name"/></ortname>
  </xsl:for-each>
</UNION>

Resultat:


<ortname>Neustadt</ortname>
<ortname>Darmstadt</ortname>
<ortname>Kapstadt</ortname>

Sequenzen ausschließen mit "except"

Mit except können Sie Teilsequenzen ausschließen, etwa nach dem Konzept Sequenz1 ohne Sequenz2. Überschneidungen beider Sequenzen werden damit ausgeschlossen.


<EXCEPT>
  <xsl:for-each select="$v1 except $v2">
    <ortname><xsl:value-of select="name"/></ortname>
  </xsl:for-each>
</EXCEPT>

Resultat:


<ortname>Neustadt</ortname>

Schnittmengen von Sequenzen bilden mit "intersect"

Mit "intersect" können Sie Schnittmengen von Sequenzen ansprechen.


<xsl:for-each select="$v1 intersect $v2">
  <ortname><xsl:value-of select="name"/></ortname>
</xsl:for-each>

Das Resultat ist eine Sequenz, in der nur Items vorkommen, die in den beiden ursprünglichen Sequenzen gemeinsam vorkommen.


<ortname>Darmstadt</ortname>

wg / 13. April 2018



Fragen? Anmerkungen? Tips?

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/concatunionexceptintersect.html