2011-08-30 103 views
1

創建變量標籤是否有可能從XML標記值

<Cars> 
    <Car>Honda</Car> 
    <Car>Ferrari</Car> 
</Cars> 

與XLST改變給定的XML結構

<Cars> 
    <Honda></Honda> 
    <Ferrari></Ferrari> 
</Cars> 

我知道XSLT一點,但我不知道如何創建變量標籤。

謝謝大家。 我欣賞所有三個答案,並投票給他們。

+0

你將需要至少(在回答時之前我以爲這是一個小例子作爲一個更大的XSLT的一部分)的根元素相匹配的模板。我已經更新了我的答案,以包含''。 – actionshrimp

+0

感謝您的快速回答,我只開始學習XLST,如果不是這樣,我會接受您的答案。 – bbaja42

回答

2

試試這個:

<?xml version="1.0"?> 
<xsl:stylesheet version="1.0" 
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="/"> 
     <xsl:apply-templates /> 
    </xsl:template> 

    <xsl:template match="Cars"> 
     <Cars> 
      <xsl:for-each select="Car"> 
       <xsl:element name="{.}"/> 
      </xsl:for-each> 
     </Cars> 
    </xsl:template> 
</xsl:stylesheet> 
3

您正在尋找xsl:element,使用大括號像這樣在運行時計算的名稱:

<xsl:template match="/"> 
    <xsl:for-each select="Cars/Car"> 
     <xsl:element name="{.}"/> 
    </xsl:for-each> 
</xsl:template> 
+1

也許只是「汽車/汽車」? – abatishchev

3

你可以使用<xsl:element>創建由給定名稱的元素。例如。在你的情況下,它會是這樣的:

<xsl:template match="Car"> 
    <xsl:element name="{text()}"></xsl:element> 
</xsl:template> 

UPD: 這是一個片段。通常這種轉換隻是爲了修改樹中的幾個節點而已。您定義複製模板:

<xsl:template match="@* | node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@* | node()"/> 
    </xsl:copy> 
</xsl:template> 

這只是複製整個XML樹是再添加一些自定義模板爲特定的元素,屬性等,例如至於上面的「車」。

+1

也許「//汽車」或「汽車/汽車」? – abatishchev

+0

@abatishchev:查看UPD – kan