XPath. Teilmenge selektieren.
Christian S.
- xml
0 ThomasM0 Christian S.0 Christian S.0 ThomasM
Hi,
ich suche nach einer XPath Anweisung, mit der ich z.B. Die Knoten 3-5 selektieren kann.
Also beispielsweise:
<root>
<objekt>
<test>wert</test>
</objekt>
<objekt>
<test>wert1</test>
</objekt>
<objekt>
<test>wert2</test>
</objekt>
<objekt>
<test>wert3</test>
</objekt>
<objekt>
<test>wert4</test>
</objekt>
<objekt>
<test>wert5</test>
</objekt>
</root>
Davon hätte ich gerne die <objekt>-Knoten 3-5 z.B.
Wie sähe der XPath String dazu aus?
Danke!
Gruß!
Hallo Christian,
ich suche nach einer XPath Anweisung, mit der ich z.B. Die Knoten 3-5 selektieren kann.
Am Beispiel der Ausgabe einer ul-Liste in HTML demonstriert:
<xsl:template match="root">
<ul>
<xsl:apply-templates select="objekt[position() >= 3 and position() <= 5]"/>
</ul>
</xsl:template>
<xsl:template match="objekt">
<li><xsl:value-of select="."/></li>
</xsl:template>
Ergebnis:
<ul>
<li>wert2</li>
<li>wert3</li>
<li>wert4</li>
</ul>
Grüße,
Thomas
Besten dank! Klappt!
Ok... ich habe das nächste Problem:
folgendes beispielhaftes XML Dokument:
<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore>
<book category="COOKING">
<title lang="en">Everyday Italian</title>
</book>
<book category="CHILDREN">
<title lang="en">Harry Potter</title>
</book>
<book category="WEB">
<title lang="en">XQuery Kick Start</title>
</book>
<book category="WEB">
<title lang="en">Learning XML</title>
</book>
</bookstore>
Nun möchte ich alle Knoten selektieren, die im <title> den String "X" enthalten.
Ginge ja mit: /bookstore/book/title[contains(., 'X')]
Aber ich möchte aus dieser Ergebnismenge, wieder nur die ersten 5 zum Beispiel haben, bzw. die von 5-10.
Wie mach ich das?
Gruß!
Hallo Christian,
Nun möchte ich alle Knoten selektieren, die im <title> den String "X" enthalten.
Ginge ja mit: /bookstore/book/title[contains(., 'X')]
Aber ich möchte aus dieser Ergebnismenge, wieder nur die ersten 5 zum Beispiel haben, bzw. die von 5-10.
[...]-Prädikate lassen sich kombinieren:
<xsl:template match="bookstore">
<xsl:apply-templates select="book/title[contains(., 'X')][position() >= 5 and position() <= 10]"/>
</xsl:template>
<xsl:template match="title">
<!-- Verarbeitung der Inhalte -->
</xsl:template>
Grüße,
Thomas
Hi,
[code lang=xml]<xsl:template match="bookstore">
<xsl:apply-templates select="book/title[contains(., 'X')][position() >= 5 and position() <= 10]"/>
</xsl:template>
das dachte ich auch erst. Funktioniert aber nicht. Das position() bezieht sich hier einfach nur auf den <title> Knoten.
Habe es mal hier getestet:
http://www.futurelab.ch/xmlkurs/xpath.en.html
Dort am Beispiel
/booklist/book/isbn[contains(., '55')][position() = 1]
getestet. Es kommen immer beide Ergebnisse. Bei position() != 1 kommt gar nichts.
Gruß!
Ok. Habs.
/booklist/book/isbn[contains(., '55')][position() = 1]
man muss noch runde Klammern drum machen.
(/booklist/book/isbn[contains(., '55')])[position() = 1]
Gruß!