/ / Premenovanie uzlov a hodnôt pomocou xslt - xslt, premenovanie, xslt-1.0

Premenovanie uzlov a hodnôt pomocou xslt - xslt, premenovanie, xslt-1.0

Ja som nový pre xslt a mám úlohu, ktorú nie somnaozaj isté, kam ísť. Chcem premenovať uzly, ale zachovať formát všetkých deklarácií uzla. V skutočnom kontexte, na ktorý sa budem zaoberať, budem robiť sériu takýchto premenovaní, ale kvôli stručnosti vzorka, ktorú som napísala, zahŕňa len premenovanie jedného uzla. Používam XSL 1.0.

vstup:

<variables>
<var>
<RENAME> a </RENAME>
</var>
<var RENAME="b"/>
<var>
<DO_NOT_TOUCH> c </DO_NOT_TOUCH>
</var>
<var DO_NOT_TOUCH="d"/>
</variables>

Požadovaný výstup:

<variables>
<var>
<DONE> a </DONE>
</var>
<var DONE="b"/>
<var>
<DO_NOT_TOUCH> c </DO_NOT_TOUCH>
</var>
<var DO_NOT_TOUCH="d"/>
</variables>

Môj xslt:

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

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

Aktuálny výstup

<variables>
<var>
<RENAMED> a </RENAMED>
</var>
<var RENAME="b">
</var>
<var>
<DO_NOT_TOUCH> c </DO_NOT_TOUCH>
</var>
<var DO_NOT_TOUCH="d">
</var>
</variables>

odpovede:

10 pre odpoveď č. 1
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="RENAME">
<DONE>
<xsl:apply-templates select="@* | node()"/>
</DONE>
</xsl:template>
<xsl:template match="@RENAME">
<xsl:attribute name="DONE">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:template>
</xsl:stylesheet>

Výstup na vašu vzorku:

<variables>
<var>
<DONE> a </DONE>
</var>
<var DONE="b"></var>
<var>
<DO_NOT_TOUCH> c </DO_NOT_TOUCH>
</var>
<var DO_NOT_TOUCH="d"></var>
</variables>

0 pre odpoveď č. 2

Mohlo by to fungovať aj ja, ale verím, že druhá odpoveď je lepšia. Myslel som, že vám ponúknem dva centy.

<xsl:variable name="Foo" select="DONE"/>

<variables>
<var>
<xsl:element name="{$Foo}"> a </xsl:element>
</var>
<var DONE="b"/>
<var>
<DO_NOT_TOUCH> c </DO_NOT_TOUCH>
</var>
<var DO_NOT_TOUCH="d"/>
</variables>