[XSL-LIST Mailing List Archive Home]
[By Thread]
[By Date]
RE: [xsl] recreating elements with attributes
Subject: RE: [xsl] recreating elements with attributes From: "Gruenewald, Terry" <tgruenewald@xxxxxxxxxx> Date: Tue, 10 Feb 2004 18:42:11 -0600 |
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: [xsl] 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 < and >, but the transformation process just then > litterally puts in < and >. > > 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 |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] recreating elements with , Michael Kay | Thread | RE: [xsl] recreating elements with , Wendell Piez |
RE: [xsl] How can I capture output , Michael Kay | Date | RE: [xsl] How to filter element val, Josh Canfield |
Month |