LINUX.ORG.RU

xslt


0

0

имеется 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>

Я хочу слишком много?

★★★★★

я хочу сказать, что мой предложенный вариант не пашет :) но такого функционала очень хочется

Pi ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.