For Each mit bestimmten Bereich


lexmex_83

Grünschnabel
Hallo hallo

Ich versuche seit ein paar Stunden heraus zu finden, wie ich in einer For Each Schleife eine Art Regex setze. Sowas
Code:
<xsl:for-each select="/XML/TAG[@number = 5-7]">



@number ist die Position bzw. das Attribut


Ich möchte nur den Wert aus den TAG's5,6 und 7 ausgeben. alle anderen sollen ignoriert werden


Mein letzter Versuch war sowas, klappte aber nicht:
Code:
<xsl:for-each select="/XML/TAG[(position() &gt; $currPOS) and (position() &lt; $sumPOS)]">
wobei currPOS die aktuelle position() ist und sumPOS ist ein Wert aus einem anderem Knopf.



Hat jemand eine Idee wie ich dies machen kann?


Danke und Gruss
lexmex_83
 

lexmex_83

Grünschnabel
hallo

ja klar, das dient nur zur Veranschaulichung...

die Tagnamen sehen anders aus... aber spielt hierbei keine Rolle.


Danke dennoch für Dein Kommentar
 
Mit XSLT 2.0 (und einem XSLT 2.0 Prozessor with Saxon 9 oder XmlPrime) geht

Code:
<xsl:for-each select="/Root/Element[@number = (5 to 7)]">...</xsl:for-each>
bzw. bei dem kurzen Bereich auch
Code:
<xsl:for-each select="/Root/Element[@number = (5, 6, 7)]">...</xsl:for-each>
Wenn man dann
Code:
<Root>
  <Element number="3">...</Element>
  <Element number="5">...</Element>
  <Element number="2">...</Element>
  <Element number="6">...</Element>
</Root>
als Eingabe hat, werden vom for-each nur die Elemente
Code:
  <Element number="5">...</Element>
  <Element number="6">...</Element>
verarbeitet.

Mit position() kann man auch arbeiten, aber das macht eher Sinn mit
Code:
<Root>
  <Element>a</Element>
  <Element>b</Element>
  <Element>c</Element>
  <Element>d</Element>
  <Element>e</Element>
</Root>
dann wird etwa mit
Code:
<xsl:for-each select="Root/Element[position() &gt; 1 and position() &lt; 5]">...</xsl:for-each>
die Menge
Code:
  <Element>b</Element>
  <Element>c</Element>
  <Element>d</Element>
verarbeitet.
 

lexmex_83

Grünschnabel
so einfach und doch so genial....

wie sagt man so schön "vor lauter Bäumen sieht man den Wald nicht mehr"!

Einfach "to" verwenden ah ah ah :)

Danke für den HInweis