在XSLT 2.0中创建与现有属性同名的属性元素

时间:2015-04-16 10:12:45

标签: xml xslt

我有一个XML输入,其元素具有许多属性。我事先并不知道哪些属性。

我想为每个现有属性创建一个同名的属性元素。

输入:

<elem id="1" name="test" version="2" />
<elem id="2" check="true" base="dir"/>

输出:

<newelem newattribute="bla" newattribute2="blabla" id="1" name="test" version="2"/>
<newelem newattribute="bla" newattribute2="blabla" id="2" check="true" base="dir"/>

我试过了:

    <xsl:for-each select="@*">
        <xsl:attribute name="name(.)" select="."/>
    </xsl:for-each>

但是看起来这个名字()函数不起作用。

这样做的正确方法是什么?

3 个答案:

答案 0 :(得分:3)

在{}

之间加上名称功能
 <xsl:for-each select="@*">
        <xsl:attribute name="{name(.)}" select="."/>
 </xsl:for-each>

我希望这可以提供帮助。

答案 1 :(得分:3)

有一种更简单的方法,只需使用<xsl:copy-of select="@*"/>

答案 2 :(得分:1)

您可以使用花括号将name(.)的呼叫包围起来:

<xsl:attribute name="{name(.)}" select="."/>