|
[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] RE: Traverse XML Source
Hi Karl,
Please try this XSL -
<?xml version="1.0"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="xml" indent="yes" />
<xsl:strip-space elements="*" />
<xsl:template match="node()">
<xsl:for-each select="@*">
<xsl:attribute name="{name()}">
<xsl:value-of select="." />
</xsl:attribute>
</xsl:for-each>
<xsl:if test="count(child::*) > 0">
<ul>
<xsl:value-of select="name()" />
<xsl:apply-templates />
</ul>
</xsl:if>
<xsl:if test="count(child::*) = 0">
<li>
<xsl:value-of select="name()" />
<xsl:apply-templates />
</li>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
Regards,
Mukul
--- "Karl J. Stubsjoen" <karl@xxxxxxxxxxxxxxxxxxxx>
wrote:
> That is a farely predicted result... I don't know to
> what depth the child
> nodes shall occur... but each parent node should be
> a <ul> and each child
> node with child nodes should be a <UL>... with the
> possibility of there
> being sibling <li>'s.
> Here is a better XML source:
>
> <ABC>
> <A>
> <AB/><CD/><EF/>
> </A>
> <B>
> <AB/><CD/><EF/>
> </B>
> <C/>
> <D/>
> <E/>
> </ABC>
>
> And the result:
> <ul>ABC
> <ul>A
> <li>AB</li>
> <li>CD</li>
> <li>EF</li>
> </ul>
> <ul>B
> <li>AB</li>
> <li>CD</li>
> <li>EF</li>
> </ul>
> <li>C</li>
> <li>D</li>
> <li>E</li>
> <li>F</li>
> </ul>
>
>
> -----Original Message-----
> From: cking [mailto:cking@xxxxxxxxxx]
> Sent: Tuesday, August 17, 2004 2:24 PM
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: Re: Traverse XML Source
>
>
> Hi Karl,
>
> there are a few problems with your XSL source:
> it contains two templates with the same match
> attribute
> <xsl:template match="*">
> which basically means: match any element.
> Template match attributes should be unique,
> otherwise the
> processor does not know which of the two templates
> to use.
>
> further, your second template has no effect, because
> match="@*"
> means: match any attribute, and your XML source tree
> doesn't
> have any element with attributes.
>
> you didn't show us the output you expect, but
> something like:
>
> <xsl:template match="/stuff/abc/def">
> <ul><xsl:apply-templates/></ul>
> </xsl:template>
>
> <xsl:template match="path | web | uid | pwd">
> <li><xsl:value-of select="."/></li>
> </xsl:template>
>
> will (hopefully) give you this output:
>
> <ul>
> <li>\\path-to-server</li>
> <li>http://my-web-path</li>
> <li>9999</li>
> <li>monkeysee</li>
> </ul>
>
> HTH,
> Anton Triest
>
> Tuesday, August 17, 2004 10:46 PM,
> karl@xxxxxxxxxxxxxxxxxxxx wrote:
> >
> > Hello,
> > I would like a very simple XSLT transformation
> that traverses an XML
> > source and creates an HTML list output. Is this
> an identity
> > transformation?
> > So far, I have only been able to get anything to
> happen on the document
> > root, and nothing below is traversed.
> > Thanks for the help. ~karl
> >
> > Here is what I have so far,
> > XML Source:
> > <stuff>
> > <abc>
> > <def>
> > <path>\\path-to-server</path>
> > <web>http://my-web-path</web>
> > <uid>9999</uid>
> > <pwd>monkeysee</pwd>
> > </def>
> > </abc>
> > </stuff>
> >
> > XSL Source:
> > <xsl:template match="*">
> > <xsl:copy>
> > <xsl:apply-templates select="@*" />
> > <xsl:apply-templates />
> > </xsl:copy>
> > </xsl:template>
> >
> >
> > <xsl:template match="@*">
> > <li><xsl:copy-of select="." /></li>
> > </xsl:template>
> >
> > <xsl:template match="*">
> > <li><xsl:copy-of select="." /></li>
> > </xsl:template>
> >
> > </xsl:stylesheet>
__________________________________
Do you Yahoo!?
Yahoo! Mail - Helps protect you from nasty viruses.
http://promotions.yahoo.com/new_mail
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|

Cart








