Разделить файл XML на основе первого символа строки - PullRequest
2 голосов
/ 14 января 2011

Я хотел бы разбить файл на несколько файлов, основываясь на начальной букве элемента. Например:

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

3 голосов
/ 14 января 2011

С 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 голосов
/ 14 января 2011

Если вы используете XSLT 2.0, посмотрите на <xsl:result-document>.

Если вы используете XSLT 1.0, вам нужен элемент расширения, такой как <exsl:document>.

Больше подсказок:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...