This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
RE: Trouble writing .xsl
- From: Jason Rizer <jasonriz at yahoo dot com>
- To: xsl-list at lists dot mulberrytech dot com
- Date: Sun, 13 Jan 2002 15:43:27 -0800 (PST)
- Subject: RE: [xsl] Trouble writing .xsl
- Reply-to: xsl-list at lists dot mulberrytech dot com
Finally, everything is working. Thanks again.
-Jason
--- "Sullivan, Dan" <dsullivan@develop.com> wrote:
> 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@yahoo.com]
> Sent: Sunday, January 13, 2002 11:44 AM
> To: xsl-list@lists.mulberrytech.com
> Subject: RE: [xsl] Trouble writing .xsl
>
>
>
> --- "Sullivan, Dan" <dsullivan@develop.com> 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@yahoo.com]
> > Sent: Saturday, January 12, 2002 8:54 PM
> > To: XSL-List@lists.mulberrytech.com
> > 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
>
__________________________________________________
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