2013-06-20 22 views
17

例如,我要一個屬性添加到這個節點:如何使用XSLT在XML中設置屬性?

<Party> 

所以它看起來像:

<Party role="this should be set using XPath"> 

屬性值必須來自XPath的。

下將無法正常工作:)

<Party role=<xsl:value-of select="some/xpath/path"/>> 

如何做到這一點?文字結果元素的

回答

29

屬性支持屬性值模板語法,使用{}

<Party role="{some/xpath/path}"> 
10
<xsl:template match="Party"> 
    <Party role="{some/xpath/path}"> 
    <xsl:apply-templates select="@* | node()"/> 
    </Party> 
</xsl:template> 

應該做的。作爲替代

<xsl:template match="Party"> 
    <xsl:copy> 
    <xsl:attribute name="role" select="some/xpath/path"/> 
    <xsl:apply-templates select="@* | node()"/> 
    </xsl:copy> 
</xsl:template> 

當然,如果有屬性和/或子節點你也想被處理(例如通過身份轉換模板進行復制)的應用模板僅僅是必要的。

2

你可以試試下面的示例:

<xsl:for-each select="YOUR_SELECT_PATH"> 
    <a> 
    <Party> <xsl:attribute name="role"><xsl:value-of select="@source"/></xsl:attribute> </Party> 
    <xsl:value-of select="."/> 
    </a> 
</xsl:for-each> 

這裏我設置屬性角色的XML節點黨。