2012-04-20 10 views
14

ich ziemlich neu bin zu XSLT und das ist mein XML:Wie die folgenden Geschwister in XSLT erhalten

<projects> 
    <project> 
     <number>1</number> 
     <title>Project X</title> 
    </project> 
    <project> 
     <number>2</number> 
     <title>Project Y</title> 
    </project> 
    <project> 
     <number>3</number> 
     <title>Project Z</title> 
    </project> 
</projects> 

Wenn ich ein Projekt und will die Geschwister erhalten, die es folgt, wie kann ich das tun ?

Dieser Code scheint nicht für mich zu arbeiten:

/projects[title="Project X"]/following-sibling 

Antwort

28

Dies ist eigentlich eine völlig XPath Frage.

Verwenden:

/*/project[title = 'Project X']/following-sibling::project[1] 

Dies wählt zunächst alle folgenden Project jeder Project Element Geschwister, das ein Kind des oberen Elements in dem XML-Dokument und dem String-Wert von mindestens einer seiner title ist Kinder ist die Zeichenfolge "Project X".

XSLT - basierte Verifikation:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 
<xsl:strip-space elements="*"/> 

<xsl:template match="/"> 
    <xsl:copy-of select= 
     "/*/project[title = 'Project X']/following-sibling::project[1]"/> 
</xsl:template> 
</xsl:stylesheet> 

Wenn diese Transformation auf dem mitgelieferten XML-Dokument angewandt wird:

<projects> 
    <project> 
     <number>1</number> 
     <title>Project X</title> 
    </project> 
    <project> 
     <number>2</number> 
     <title>Project Y</title> 
    </project> 
    <project> 
     <number>3</number> 
     <title>Project Z</title> 
    </project> 
</projects> 

der XPath-Ausdruck ausgewertet wird und das richtig ausgewählte Element wird in den Ausgang kopiert:

<project> 
    <number>2</number> 
    <title>Project Y</title> 
</project> 
+0

Hey Dimitre, das wirkt wie ein Zauber. Vielen Dank! – Tintin81

+0

@ Tintin81: Gern geschehen. –

Verwandte Themen