2011-01-13 11 views
1

Ich möchte eine Datei in mehrere Dateien basierend auf dem Anfangsbuchstaben eines Elements aufteilen. Zum Beispiel:Geteilte XML-Datei basierend auf dem ersten Zeichen einer Zeichenfolge

<Employees>  
<Employee id="1"> 
<firstname value="Atif"></firstname>   
<lastname value="Bashir"></lastname>   
<age >32</age>   
</Employee>  
<Employee id="2"> 
<firstname value="xyz"></firstname>   
<lastname value="abc"></lastname>   
<age >32</age>   
</Employee>  
<Employee id="3"> 
<firstname value="abc"></firstname>   
<lastname value="none"></lastname>   
<age >32</age>   
</Employee>  
</Employees> 

Nach der Transformation der Anwendung sollte die obige Datei in zwei Dateien, weil das erste Zeichen Angestellte/Vorname aufgeteilt werden [@value] (und Gruppe alle Daten). So zum obigen Fall sollte erste Datei sein:

a.xml

<Employees>  
<Employee id="1"> 
<firstname value="Atif"></firstname>   
<lastname value="Bashir"></lastname>   
<age >32</age>   
</Employee>  
<Employee id="3"> 
<firstname value="abc"></firstname>   
<lastname value="none"></lastname>   
<age >32</age>   
</Employee>  
</Employees> 

und die zweite Datei sollte sein:

x.xml

<Employees>  
<Employee id="2"> 
<firstname value="xyz"></firstname>   
<lastname value="abc"></lastname>   
<age >32</age>   
</Employee>  
</Employees>  

Was die XSLT-Code ist diese Transformation durchführen?

Vielen Dank!

Antwort

3

Mit XSLT 2.0:

<xsl:for-each-group select="Employee" 
        group-by="lower-case(substring(firstname,1,1))"> 
    <xsl:result-document href="{current-grouping-key()}.xml"> 
    <xsl:copy-of select="current-group()"/> 
    </xsl:result-document> 
</xsl:for-each-group> 
+0

+1 Excellent Dr. Kay. Ich habe ein wenig Formatierung hinzugefügt, so dass es nicht scrollt ... –

+0

Danke Michael. – atif

Verwandte Themen