2011-08-30 15 views
16

這是我基於XML如何使用XSLT

<CATALOG> 
    <NAME>C1</NAME> 
    <CD> 
    <NAME>Empire Burlesque</NAME> 
    <ARTIST>Bob Dylan</ARTIST> 
    <COUNTRY>USA</COUNTRY> 
    <COMPANY>Columbia</COMPANY> 
    <PRICE>10.90</PRICE> 
    <YEAR>1985</YEAR> 
    </CD> 
    <CD> 
    <NAME>Hide your heart</NAME> 
    <ARTIST>Bonnie Tyler</ARTIST> 
    <COUNTRY>UK</COUNTRY> 
    <COMPANY>CBS Records</COMPANY> 
    <PRICE>9.90</PRICE> 
    <YEAR>1988</YEAR> 
    </CD> 
</CATALOG> 

我要替換目錄名稱標籤CATALOG-NAME和CD對CD-NAME的名稱標籤,它應該重新命名XML標籤我的XML看起來像這 -

<CATALOG> 
     <CATALOG-NAME>C1</CATALOG-NAME> 
     <CD> 
     <CD-NAME>Empire Burlesque</CD-NAME> 
     <ARTIST>Bob Dylan</ARTIST> 
     <COUNTRY>USA</COUNTRY> 
     <COMPANY>Columbia</COMPANY> 
     <PRICE>10.90</PRICE> 
     <YEAR>1985</YEAR> 
     </CD> 
     <CD> 
     <CD-NAME>Hide your heart</CD-NAME> 
     <ARTIST>Bonnie Tyler</ARTIST> 
     <COUNTRY>UK</COUNTRY> 
     <COMPANY>CBS Records</COMPANY> 
     <PRICE>9.90</PRICE> 
     <YEAR>1988</YEAR> 
     </CD> 
    </CATALOG> 
+0

我一直在使用XSLT試圖和我沒有找到任何會改變標籤價值的功能。我上面發佈的示例與我需要用更大的XML文件替換標籤的例子類似。 – Srinivas

回答

30

使用身份與覆蓋的元素轉換要重命名:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="@*|node()"> 
     <xsl:copy> 
      <xsl:apply-templates select="@*|node()" /> 
     </xsl:copy> 
    </xsl:template> 
    <xsl:template match="CD/NAME"> 
     <CD-NAME><xsl:apply-templates select="@*|node()" /></CD-NAME> 
    </xsl:template> 
    <xsl:template match="CATALOG/NAME"> 
     <CATALOG-NAME><xsl:apply-templates select="@*|node()" /></CATALOG-NAME> 
    </xsl:template> 
</xsl:stylesheet> 
+0

您可以包含一段代碼如何工作的1行說明嗎?謝謝! – Akhoy

+0

標識轉換產生與其輸入相同的輸出。在這種情況下,我們稍微修改標識轉換以匹配CD/NAME和CATALOG/NAME元素,併爲這些特定標籤名稱生成重命名的輸出。其他一切都保持不變。這是一種常見的模式。 –