我有一个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>
但是看起来这个名字()函数不起作用。
这样做的正确方法是什么?
答案 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="."/>