如何使用 XSLT 在 XML 中设置属性?

Posted

技术标签:

【中文标题】如何使用 XSLT 在 XML 中设置属性?【英文标题】:How to set attribute in XML using XSLT? 【发布时间】:2013-06-17 05:48:22 【问题描述】:

比如我想给这个节点添加一个属性:

<Party>

所以它看起来像:

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

属性值必须来自 XPath。

以下将不起作用:)

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

怎么做?

【问题讨论】:

【参考方案1】:

文字结果元素的属性支持属性值模板语法,使用:

<Party role="some/xpath/path">

【讨论】:

【参考方案2】:
<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>

当然,仅当您还希望处理属性和/或子节点时才需要应用模板(例如要被身份转换模板复制)。

【讨论】:

【参考方案3】:

您可以尝试以下示例:

<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节点Party。

【讨论】:

以上是关于如何使用 XSLT 在 XML 中设置属性?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 xml 属性中设置命名空间?

如何在 XML 属性中设置换行符?

如何使用 lxml 在属性值中设置命名空间前缀?

如何使用 xslt 获取 XML 的属性值和代码作为 html 的值

如何在内存数据库中设置 fetchSize?

如何在 tableLayoutPanel 中设置列​​跨度