[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

Re: [xsl] recreating elements with attributes

Subject: Re: [xsl] recreating elements with attributes
From: "J.Pietschmann" <j3322ptm@xxxxxxxx>
Date: Wed, 11 Feb 2004 00:45:10 +0100

Gruenewald, Terry wrote:
I'm performing an XML to XML transformation and I need to make some
modifications to a few attributes during this transformation.  I've tried the
following code, but I'm stuck as to how to print the "<" sign and ">" sign.
I've tried using the &lt; and &gt;, but the transformation process just then
litterally puts in &lt; and &gt;.

this code loops through all attributes for the TOLL_CDR node.  The problem is
when I try and put "<TOLL_CDR" in there, because the parser yells about the
"<" sign in front of it.  Any thoughts?

>    <xsl:template match="//CDRS/TOLL_CDR">
>    <TOLL_CDR
>    <xsl:text>
> </xsl:text>
>    <xsl:for-each select="@*">
> 	<xsl:value-of select="name()" />="<xsl:value-of select="." />"<xsl:text>
> 	</xsl:text>
>    </xsl:for-each>
> />
>    </xsl:template>

XSLT is *not* a macro language, or whatever you expect. XSLT is a
language which describes a transformation from a source tree of
nodes into a result tree. The nodes in both trees represent mainly
XML elements, attributes and text.
You have really  to get this: you *don't* create a string with angle
brackets. You create a result tree.

After this has sunken in, you might realize that you have to create
attributes in the result tree either with xsl:attribute or by copying
them from the source tree in an appropriate context. In your case,
you are basically looking for the generic copy template. Somewhat
more specific
  <xsl:template match="CDRS/TOLL_CDR">
      <xsl:apply-templates select="node()|@*"/>

It pays off to get one of the introductionary books about XSLT and
read the first few chapters, which should explain in detail what is
going on here.


XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list

Current Thread