[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

RE: recreating elements with attributes

Subject: RE: recreating elements with attributes
From: "Gruenewald, Terry" <tgruenewald@xxxxxxxxxx>
Date: Tue, 10 Feb 2004 18:42:11 -0600
mike gruenewald
Thanks.  Actually I needed to do more than just copy, I needed to change some attributes as well.  Your <xsl:attribute> hint gave me my answer:

   <xsl:template match="CDRS/TOLL_CDR">
        <TOLL_CDR>
           <xsl:for-each select="@*">
             <xsl:choose>
                <xsl:when test="name()='DIVISION'">
                    <!-- do special logic here, such as rename an attribute -->
                    <xsl:attribute name="mydivision">
                        <xsl:value-of select="." />
                    </xsl:attribute>
                </xsl:when>
                <xsl:otherwise>
                    <xsl:copy/>
                </xsl:otherwise>
             </xsl:choose>

           </xsl:for-each>
        </TOLL_CDR>
   </xsl:template>

Thanks everyone who responded.

-----Original Message-----
From: J.Pietschmann [mailto:j3322ptm@xxxxxxxx]
Sent: Tuesday, February 10, 2004 5:45 PM
To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Subject: Re:  recreating elements with attributes


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>

Ouch.
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:copy>
       <xsl:apply-templates select="node()|@*"/>
     </xsl:copy>
   </xsl:template>

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.

J.Pietschmann

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


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


Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.