如何使用xslt重命名子元素属性并修改属性值

时间:2016-07-07 18:55:41

标签: xml xslt xpath

我的xml中有这个元素:

app.UseMvc(routes =>
{
  routes.MapRoute(name: "areaRoute",
    template: "{area}/{controller=Home}/{action=Index}");

  routes.MapRoute(
      name: "default",
      template: "{controller=Home}/{action=Index}");
});

我希望输出为

<para><link href="D52871.dita">abc</link>
</para>

我在开始时使用了身份变换来复制一切。 我试过这段代码片段

<para><link id="D52871">abc</link>
</para>

但它不起作用可能是因为我需要指定link元素在para内。尝试过几种方法来包含但迄今为止都没有。

1 个答案:

答案 0 :(得分:1)

以下对我来说没问题

<xsl:stylesheet  xmlns="http://www.w3.org/TR/xhtml1/strict" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema"  version="1.0">
    <xsl:output method ="xml" indent="yes"/>

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

    <xsl:template match="link/@href">
        <xsl:attribute name="id">
            <xsl:value-of select="substring-before(.,'.')"/>
        </xsl:attribute>
    </xsl:template> 

</xsl:stylesheet>

输入:

<?xml version="1.0" encoding="UTF-8"?>
<para>
   <link href="D52871.dita">abc</link>
</para>

输出:

<?xml version="1.0" encoding="UTF-8"?>
<para>
   <link id="D52871">abc</link>
</para>