22
I am converting one format of XML to another and I need to insert an element and name it with the value of a variable. For example, I am trying the statements below using XSLT, but I am getting an error from the processor saying that the element name is invalid.
<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&