如何使用XSLT重命名属性?

unj*_*nj2 11 xml xslt

我有一个像这样的xml:

<person name="foo" gender = "male" />
Run Code Online (Sandbox Code Playgroud)

我想把它改造成

<person id="foo" gender="male" />
Run Code Online (Sandbox Code Playgroud)

有没有办法使用XSLT?

  • 我会亲自拥有很多子节点

  • 我会在这个人身上有更多的属性.

Rob*_*ney 15

这很简单:使用身份转换并创建一个转换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>
Run Code Online (Sandbox Code Playgroud)

除了name属性之外,这将使文档中的所有内容保持原样.如果你只是想改变name的属性person元素,放在模板的更严格的XPath match属性,例如person/@name.