2017-02-16 60 views
0

不同兒童的內容我有以下XML文件:XSLT獲得具有相同節點名稱

<?xml version="1.0" encoding="UTF-8"?> 
<group>  
    <List> 
    <id_num>1</id_num> 
    <car>cars</car> 
     <value>   
      <color>green</color> 
     <name>nissan</name> 
     </value> 
     <value>   
      <color>yellow</color> 
     <name>renault</name> 
     </value> 
     <value> 
      <color>black</color> 
      <name>ford</name> 
     </value> 
    <value_number>3</value_number> 
    </List> 

    <List> 
    <id_num>2</id_num> 
    <car>cars</car> 
     <value>   
      <color>blu</color> 
     <name>porsche</name> 
     </value> 
     <value>   
      <color>white</color> 
     <name>volvo</name> 
     </value>   
    <value_number>2</value_number> 
    </List>   
</group> 

使用XSLT我想在節點內得到孩子的不同內容(顏色和名稱) 「值」,即使它具有相同的名字複製

所需的輸出應該是這樣的XML文件:我無法分辨牛逼

<?xml version="1.0" encoding="UTF-8"?> 
<group>group1</group> 
<List> 
<cars_1> 
    <car> 
     <color_info>green</color_info> 
     <brand_name>nissan</brand_name> 
    </car> 
<car> 
     <color_info>yellow</color_info> 
     <brand_name>renault</brand_name> 
</car> 
    <car> 
     <color_info>black</color_info> 
     <brand_name>ford</brand_name> 
    </car> 
</cars_1> 

<cars_2> 
    <car> 
     <color_info>blu</color_info> 
     <brand_name>porsche</brand_name> 
    </car> 
    <car> 
     <color_info>white</color_info> 
    <brand_name>volvo</brand_name> 
    </car> 
</cars_2> 
</List> 

當我嘗試使用 他與不同的內容,並作爲結果的內容複製

此不同的節點是輸出我用我的XSL文件得到

<?xml version="1.0" encoding="utf-8"?> 
<group>group1</group><List> 
    <cars_1> 
    <car> 
     <color_info>green</color_info> 
     <brand_name>nissan</brand_name> 
    </car> 
    <car> 
     <color_info>yellow</color_info> 
     <brand_name>renault</brand_name> 
    </car> 
    <car> 
     <color_info>black</color_info> 
     <brand_name>ford</brand_name> 
    </car> 
    </cars_1> 
    <cars_2> 
    <car> 
     <color_info>blu</color_info> 
     <brand_name>porsche</brand_name> 
    </car> 
    <car> 
     <color_info>white</color_info> 
     <brand_name>volvo</brand_name> 
    </car> 
    </cars_2> 
</List><group>group1</group><List> 
    <cars_1> 
    <car> 
     <color_info>blu</color_info> 
     <brand_name>porsche</brand_name> 
    </car> 
    <car> 
     <color_info>yellow</color_info> 
     <brand_name>renault</brand_name> 
    </car> 
    <car> 
     <color_info>black</color_info> 
     <brand_name>ford</brand_name> 
    </car> 
    </cars_1> 
    <cars_2> 
    <car> 
     <color_info>blu</color_info> 
     <brand_name>porsche</brand_name> 
    </car> 
    <car> 
     <color_info>white</color_info> 
     <brand_name>volvo</brand_name> 
    </car> 
    </cars_2> 
</List> 

獲得:

<?xml version="1.0" encoding="UTF-8"?>   
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:xlink="http://www.w3.org/1999/xlink"> 
     <xsl:output method="xml" indent="yes" encoding="utf-8" /> 


<xsl:template match="/" > 
<xsl:for-each select="group/List"> 

<group>group1</group> 
<List> 
<cars_1> 
    <car> 
     <color_info><xsl:value-of select="value/color"/> 

    </color_info> 
     <brand_name><xsl:value-of select="value/name"/></brand_name> 
    </car> 
<car> 
     <color_info>yellow</color_info> 
     <brand_name>renault</brand_name> 
</car> 
    <car> 
     <color_info>black</color_info> 
     <brand_name>ford</brand_name> 
    </car> 
</cars_1> 

<cars_2> 
    <car> 
     <color_info>blu</color_info> 
     <brand_name>porsche</brand_name> 
    </car> 
    <car> 
     <color_info>white</color_info> 
    <brand_name>volvo</brand_name> 
    </car> 
</cars_2> 
</List> 
</xsl:for-each> 
</xsl:template> 
</xsl:stylesheet> 

在此先感謝

+0

這似乎是一個簡單的任務,使用'「或''。如果你不能使它工作,發佈你的嘗試,以便我們可以修復它,而不必從頭開始爲你寫代碼。 - P.S.一般來說,編號爲'cars_1','cars_2'的元素是不好的XML設計。 –

+0

@ michael.hor257k我添加了我的xsl文件。 你能否爲我的xml建議我一個更好的設計? 謝謝 –

回答

0

那麼,如果你這樣做:

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 

<xsl:template match="/group" > 
    <group> 
     <xsl:for-each select="List"> 
      <cars id="{id_num}"> 
       <xsl:for-each select="value"> 
        <car> 
         <color_info> 
          <xsl:value-of select="color"/> 
         </color_info> 
         <brand_name> 
          <xsl:value-of select="name"/> 
         </brand_name> 
        </car> 
       </xsl:for-each> 
      </cars> 
     </xsl:for-each> 
    </group> 
</xsl:template> 

</xsl:stylesheet> 

您將獲得:

<?xml version="1.0" encoding="UTF-8"?> 
<group> 
    <cars id="1"> 
    <car> 
     <color_info>green</color_info> 
     <brand_name>nissan</brand_name> 
    </car> 
    <car> 
     <color_info>yellow</color_info> 
     <brand_name>renault</brand_name> 
    </car> 
    <car> 
     <color_info>black</color_info> 
     <brand_name>ford</brand_name> 
    </car> 
    </cars> 
    <cars id="2"> 
    <car> 
     <color_info>blu</color_info> 
     <brand_name>porsche</brand_name> 
    </car> 
    <car> 
     <color_info>white</color_info> 
     <brand_name>volvo</brand_name> 
    </car> 
    </cars> 
</group> 

我相信這是足夠接近預期的結果。

相關問題