transformador - Necesita valor variable como nombre de elemento usando XSLT
xslt editor (1)
Estoy convirtiendo un formato de XML a otro y necesito insertar un elemento y nombrarlo con el valor de una variable. Por ejemplo, estoy probando las siguientes declaraciones usando XSLT, pero recibo un error del procesador que dice que el nombre del elemento no es válido.
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml">
<xsl:output method="xml" version="1.0" encoding="utf-8" indent="no" omit-xml-declaration="no"/>
<xsl:variable name="i" select="i"/>
<xsl:variable name="b" select="b"/>
<xsl:variable name="u" select="u"/>
<xsl:variable name="s" select="s"/>
<xsl:variable name="r" select="r"/>
<xsl:variable name="m" select="m"/>
<xsl:variable name="n" select="n"/>
<xsl:template match="/|comment()|processing-instruction()">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template match="*">
<xsl:element name="{local-name()}">
<xsl:apply-templates select="@*|node()"/>
</xsl:element>
</xsl:template>
<xsl:template match="@*">
<xsl:attribute name="{local-name()}">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:template>
<xsl:template match="//w:r">
<xsl:if test="not(./descendant::w:i)">
<xsl:variable name="i">0</xsl:variable>
</xsl:if>
<xsl:if test="not(./descendant::w:b)">
<xsl:variable name="b">0</xsl:variable>
</xsl:if>
<xsl:if test="not(./descendant::w:u)">
<xsl:variable name="u">0</xsl:variable>
</xsl:if>
<xsl:if test="not(./descendant::w:caps)">
<xsl:variable name="c">0</xsl:variable>
</xsl:if>
<xsl:if test="not(contains($i,''0''))">
<xsl:variable name="r" select="$i"></xsl:variable>
<xsl:text>KARTHIKK</xsl:text>
</xsl:if>
<xsl:if test="not(contains($b,''0''))">
<xsl:variable name="m" select="$r+$b"></xsl:variable>
</xsl:if>
<xsl:if test="not(contains($u,''0''))">
<xsl:variable name="n" select="$m+$u"></xsl:variable>
</xsl:if>
<xsl:copy namespaces="no"><xsl:apply-templates/></xsl:copy>
<!-- <xsl:element name="{local-name(.)}"><xsl:element><xsl:value-of select="$n"/><xsl:apply-templates/></xsl:element></xsl:element>-->
</xsl:template>
</xsl:stylesheet>
¿Cómo puedo generar un nombre de elemento usando una variable XSLT?
Es perfectamente posible construir un elemento cuyo nombre se define dinámicamente por el valor de una variable :
<xsl:element name="{$vVar}">3</xsl:element>
Si el valor de cadena de la variable $vVar
es "Hello"
, lo anterior produce:
<Hello>3</Hello>
Sin embargo, si el valor de cadena de la variable $vVar
es "123"
se $vVar
un error, ya que la cadena "123"
no es un nombre legal en XML .
No está claro dónde en su código le gustaría construir un elemento dinámicamente (y hay otros errores en el código), pero solo use las reglas / ejemplos anteriores y construirá los elementos exactamente como se describe.