基于字符串的第一个字符拆分XML文件

时间:2011-01-13 21:13:49

标签: xslt

我想根据元素的起始字母将文件拆分为多个文件。例如:

 <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> 

应用转换后,应将上述文件拆分为两个文件,因为Employee / firstname的第一个字符[@value](并将所有数据分组)。因此对于上述情况,第一个文件应该是:

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> 

,第二个文件应为:

x.xml

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

执行此转换的XSLT代码是什么?

谢谢!

2 个答案:

答案 0 :(得分:3)

使用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>

答案 1 :(得分:0)

如果您使用的是XSLT 2.0,请查看<xsl:result-document>

如果您使用的是XSLT 1.0,则需要一个扩展元素,例如<exsl:document>

更多线索: