[XSL-LIST Mailing List Archive Home]
[By Thread]
[By Date]
RE: [xsl] Trouble writing .xsl
Subject: RE: [xsl] Trouble writing .xsl From: "Sullivan, Dan" <dsullivan@xxxxxxxxxxx> Date: Sun, 13 Jan 2002 11:04:57 -0800 |
There are many variations on this depending on the exact needs of your problem. Watch for line wraps. <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:ABC="org.jason"> <!-- identity transform --> <xsl:template match="node()|@*"> <xsl:copy> <xsl:apply-templates select="node()|@*"/> </xsl:copy> </xsl:template> <!-- transform for jason --> <xsl:template match="ABC:*"> <xsl:choose> <!-- see if local name start with jason --> <xsl:when test="substring-before(local-name(.), '.')='jason'"> <!-- if so remove it --> <xsl:element name="{concat('ABC:', substring-after(local-name(.), '.'))}" namespace="org.jason"> <!-- but keep going if there is more --> <xsl:apply-templates select="node()|@*"/> </xsl:element> </xsl:when> <xsl:otherwise> <!-- if it is not a jason just copy and keep on going --> <xsl:copy> <xsl:apply-templates select="node()|@*"/> </xsl:copy> </xsl:otherwise> </xsl:choose> </xsl:template> </xsl:stylesheet> Dan -----Original Message----- From: Jason Rizer [mailto:jasonriz@xxxxxxxxx] Sent: Sunday, January 13, 2002 11:44 AM To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx Subject: RE: [xsl] Trouble writing .xsl --- "Sullivan, Dan" <dsullivan@xxxxxxxxxxx> wrote: > You need to make use of an identity transform like > this: > > > <xsl:stylesheet > xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > version="1.0" > xmlns:ABC="org.jason"> > > <!-- identity transform, for everything you don't > care about changing > --> > <xsl:template match="@*|node()"> > <xsl:copy> > <xsl:apply-templates select="@*|node()"/> > </xsl:copy> > </xsl:template> > > <!-- transform for jason, the only element you care > about changing --> > <xsl:template match="ABC:jason.Smith"> > <ABC:Smith> > <!-- process children, atrs, if any --> > <xsl:apply-templates select="@*|node()"/> > </ABC:Smith> > </xsl:template> > > </xsl:stylesheet> > > > Also your source file had a typo in it (XMI > Content). > > Dan > > -----Original Message----- > From: Jason Rizer [mailto:jasonriz@xxxxxxxxx] > Sent: Saturday, January 12, 2002 8:54 PM > To: XSL-List@xxxxxxxxxxxxxxxxxxxxxx > Subject: [xsl] Trouble writing .xsl > > > Hello, > > I've just recently begun using xslt and I'm kind of > stuck on something pretty simple. I've worked > through > parts of a couple of tutorials but I still can't > seem > to handle this problem. I'd like to convert (for > example) the following chunk of xml: > > <?xml version="1.0" encoding="UTF-8" ?> > <XMI xmlns:ABC="org.jason"> > <XMI.content> > <ABC:jason.Smith> > <LL/> > </ABC:jason.Smith> > <Smith/> > <XMI content> > </XMI> > > to this chunk: > > <?xml version="1.0" encoding="UTF-8" ?> > <XMI xmlns:ABC="org.jason"> > <XMI.content> > <ABC:Smith> > <LL/> > </ABC:Smith> > <Smith/> > <XMI content> > </XMI> > > In other words I want to replace each elament named > jason.Smith with an identical element (ie not affect > any of it's children or it's attributes) named Smith > but only when It occurs in the Namespace ABC. I want > all other elements in the output file to remain > unchanged. I think I need to use the XPATH > namespace( > ) function in my match expression but I can't quite > seem to get it to work. Any help with creating this > stylesheet would be greatly appreciated. Thanks in > advance! > > -Jason > > ps - What would a style sheet look like which > created > an output xml document identical to the source xml > document? > > __________________________________________________ > Do You Yahoo!? > Send FREE video emails in Yahoo! Mail! > http://promo.yahoo.com/videomail/ > > XSL-List info and archive: > http://www.mulberrytech.com/xsl/xsl-list > > > XSL-List info and archive: > http://www.mulberrytech.com/xsl/xsl-list > Dan, Thanks, this solved my problem (as I stated it) perfectly. You're 8 lines of XPATH did what my 50 couldn't :) I guess there is a bit of a learning curve. Still, I have one additional problem. I realized that I didn't quite state my problem fully. It's not suffiecent that I replace elements named ABC:jason.Smith with elements named ABC:Smith, I've also got to repace any elements whose names begin with ABC:jason.Smith the elements whose names begin with ABC:Smith while leaving the rest of the element name unchanged. For example, I've got to make the following changes anywhere they occur in the document: ABC:jason.Smith -> ABC:Smith ABC:jason.Smith.foo -> ABC:Smith.foo I've been playing with the starts-with( ) and substring-after( ) functions but I can't get it to work. If there is an easy solution you could share with me it would be greatly appreciated. Thanks in advance. -Jason __________________________________________________ Do You Yahoo!? Send FREE video emails in Yahoo! Mail! http://promo.yahoo.com/videomail/ 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] Trouble writing .xsl, Jason Rizer | Thread | RE: [xsl] Trouble writing .xsl, Jason Rizer |
Re: [xsl] Re: A question about the , Jeni Tennison | Date | Re: [xsl] XSLT Repository, Steve Ball |
Month |