2016-12-16 5 views
0

пытается разбить файл xml с несколькими элементами в отдельный xml, имеющий разные элементы.Разделить файл xml с несколькими значениями, используя xslt

входного файла:

<Person> 
<firstname>ABC</firstname> 
<lastname>ABC</lastname> 
<address>address1</address> 
<address>address2</address> 
<city>city</city> 
<state>state</state> 
<currency>currency1</currency> 
<currency>currency2</currency> 
</Person> 

Need to split above file into two files as 
Output file-1 

<Person> 
<firstname>ABC</firstname> 
<lastname>ABC</lastname> 
<address>address1</address> 
<city>city</city> 
<state>state</state> 
<currency>currency1</currency> 
</Person> 

Выходной файл -2

<Person> 
<firstname>ABC</firstname> 
<lastname>ABC</lastname> 
<address>address2</address> 
<city>city</city> 
<state>state</state> 
<currency>currency2</currency> 
</Person> 
+0

Всегда ли будут два элемента адреса и валюты? Или разные, с неизвестным количеством элементов? –

+0

будет более двух элементов, но все они будут известны. – Rajeev

ответ

0

Вот общее решение, которое выводит N файлов, где N является максимальное количество одноименных дочерних элементов, где файл N содержит N-й экземпляр каждого имени элемента, если в нем есть, по крайней мере, N или первый:

<xsl:template match="/*"> 
    <xsl:variable name="this" select="."/> 
    <xsl:variable name="names" select="distinct-values(*/name())"/> 
    <xsl:for-each select="1 to max(
      for $name in $names return count(*[name()=$name]))"/> 
    <xsl:variable name="n" select="."/> 
    <xsl:result-document href="file{.}"> 
     <xsl:element name="{name($this)}"> 
     <xsl:for-each-group select="$this/*" group-by="name()"> 
      <xsl:copy-of select="(current-group()[$n], .)[1]"/> 
     </xsl:for-each-group> 
     </xsl:element> 
    </xsl:result-document> 
    </xsl:for-each> 
</xsl:template> 

Это должно делать то, что вы хотите, с примером ввода, который вы указали, но может ли он делать что-либо с любым другим вводом, - это кто-то догадывается, потому что вы недоопределили требования.

 Смежные вопросы

  • Нет связанных вопросов^_^