2014-03-31 128 views
0

內我有以下XML從XML到XML XSLT

<ROOT> 
    <COUNTRY Name="Ukraine"> 
    <CITY> 
     <POPULATION>1427000</POPULATION> 
     <NAME>Kharkov</NAME> 
     <SQUARE>310 km2</SQUARE> 
    </CITY> 
    <CITY> 
     <POPULATION>2758000</POPULATION> 
     <NAME>Kiev</NAME> 
     <SQUARE>839 km2</SQUARE> 
    </CITY> 
    </COUNTRY> 
    <COUNTRY Name="England"> 
    <CITY> 
     <POPULATION>7000000</POPULATION> 
     <NAME>London</NAME> 
     <SQUARE>1579 km2</SQUARE> 
    </CITY> 
    </COUNTRY> 
</ROOT> 

我需要使用XSLT,並得到這樣的結果

<ROOT> 
    <CITY Name="...", Population="...", Square="...", Country="..." /> 
</ROOT> 

我已經寫這XSLT的某些部分,但它工作正常只有一個國家

<xsl:template match="COUNTRY"> 
    <ROOT> 
     <CITY> 
      <xsl:attribute name="Name"> 
      <xsl:value-of select="CITY/NAME"/>, Population:<xsl:value-of select="CITY/POPULATION"/>, Square:<xsl:value-of select="CITY/SQUARE"/>, Country:<xsl:value-of select="@Name"/> 
      </xsl:attribute> 
     </CITY> 
     </ROOT> 
    </xsl:template> 

而我不知道它應該如何爲少數國家和城市工作。我是XSLT新手,所以我需要你的幫助。

+1

你可能想匹配'CITY',尋找城市的父節點的國名。此外,逗號不是有效的XML標籤的一部分。 –

+0

謝謝!但是如果我在CITY上匹配,我怎麼能在城市的父節點中看到國名? –

回答

0

您需要遍歷每個城市。下面的XSLT應該做的工作:

<xsl:template match="/ROOT"> 
<ROOT> 
    <xsl:for-each select="COUNTRY/CITY"> 
    <CITY> 
    <xsl:attribute name="Name"><xsl:value-of select="NAME"/></xsl:attribute> 
    <xsl:attribute name="Population"><xsl:value-of select="POPULATION"/></xsl:attribute> 
    <xsl:attribute name="Square"><xsl:value-of select="SQUARE"/></xsl:attribute> 
    <xsl:attribute name="Country"><xsl:value-of select="../@Name"/></xsl:attribute> 
    </CITY> 
    </xsl:for-each> 
</ROOT> 
</xsl:template> 

通知../@Name使用,這表明父元素(COUNTRY)的Name屬性。

結果舉例:

<?xml version="1.0" encoding="UTF-8"?> 
<ROOT> 
    <CITY Name="Kharkov" Population="1427000" Square="310 km2" Country="Ukraine"/> 
    <CITY Name="Kiev" Population="2758000" Square="839 km2" Country="Ukraine"/> 
    <CITY Name="London" Population="7000000" Square="1579 km2" Country="England"/> 
</ROOT> 
+0

就是這樣!關於父元素,我應該猜到了,因爲它與C#中的文件路徑一樣 –