имеется xml
<?xml version="1.0" ?>
<?xml-stylesheet href="data.xsl" type="text/xsl" ?>
<someList>
<data id="1">
<some1/>
<some2/>
<error/>
</data>
<fault id="3">
<error>7</error>
</fault>
<data id="2">
<some1/>
<some2/>
<error>o</error>
</data>
</someList>
и имеется трансформация
<?xml version="1.0" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="fault">
<xsl:element name="data">
<xsl:apply-templates select="@*|node()"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
т.е. тут есть немного магии: в результате мы получаем
<somelist>
<data id="1">
<some1/>
<some2/>
<error/>
</data>
<data id="3">
<error>7</error>
</data>
<data id="2">
<some1/>
<some2/>
<error>o</error>
</data>
</somelist>
Чего хочется... хочется параметризовать имя тага «data» наподобии
<?xml version="1.0" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml"/>
<xsl:param name="faultRootTag">data</xsl:param>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="fault">
<xsl:element name="$faultRootTag">
<xsl:apply-templates select="@*|node()"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
Я хочу слишком много?