我有一個這樣的XML:如何使用XSLT重命名屬性?
<person name="foo" gender = "male" />
我想將它轉化爲
<person id="foo" gender="male" />
有沒有辦法做到這一點使用XSLT?
我將有很多的子節點的人
我會在人多的屬性。
我有一個這樣的XML:如何使用XSLT重命名屬性?
<person name="foo" gender = "male" />
我想將它轉化爲
<person id="foo" gender="male" />
有沒有辦法做到這一點使用XSLT?
我將有很多的子節點的人
我會在人多的屬性。
這是非常簡單的:使用恆等變換,並創建一個模板變換name
屬性:
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="@name">
<xsl:attribute name="id">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:template>
這將在文檔中留下的一切,除了name
屬性正是因爲它是。如果您只想更改person
元素上的name
屬性,請在模板的match
屬性中添加更具限制性的XPath,例如, person/@name
。
這應該這樣做,不太清楚的{名()},但你可以替換成「人」
> <xsl:template match="person">
> <xsl:element name="{name()}">
> <xsl:attribute name="id">
> <xsl:value-of select="@name"/>
> </xsl:attribute>
> <xsl:attribute name="gender">
> <xsl:value-of select="@gender"/>
> </xsl:attribute>
> </xsl:element>
> </xsl:template>
我是否需要爲每個屬性創建一個屬性?我可以複製除ID之外的所有屬性嗎? – unj2 2010-04-21 01:48:08
使用'xsl:element',一個屬性值模板和'name()'函數來創建一個你已經知道的名字的元素是瘋狂的。將'
只是試圖提供一種適用於任何元素而不管名稱的通用解決方案。如果它只能用於
這看起來更像是將屬性重命名給我,除非您的實際場景中沒有更多內容涉及到問題。 – 2010-04-20 23:45:12