This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
RE: XML and XSLT
- To: "'xsl-list at mulberrytech dot com'" <xsl-list at mulberrytech dot com>
- Subject: RE: XML and XSLT
- From: Mike Brown <mbrown at corp dot webb dot net>
- Date: Thu, 2 Mar 2000 13:36:27 -0700
- Cc: "'Matt dot Varney at kctcs dot net'" <Matt dot Varney at kctcs dot net>
- Reply-To: xsl-list at mulberrytech dot com
> I would like to use XSTL to transform one XML doc
[...snip...]
>
> <dsobjects>
> <prop>
> <title>President's Office Staff</title>
> <summary>Financial Reports for President's Office
> Staff</summary>
> </prop>
> <prop>
> <title>VP of Finance</title>
> <summary>Financial Reports for VP of Finance</summary>
> </prop>
[...snip...]
> <dsobjects>
>
> <dsobjects>
> <dsobject type="Collection" handle="Collection-100">
> <prop>
> <title>President's Office Staff</title>
> <summary>Financial Reports for
> President's Office
> Staff</summary>
> </prop>
> </dsobject>
[...snip...]
> </dsobjects>
Sorry to nitpick, but...
1. it's XSLT, not XSTL.
2. XSLT reads from and creates intangible node trees that *may* (and usually
are) derived from literal XML documents, and *may* emit the new tree as an
XML document, but you will get in trouble if you think of it as a language
that acts directly on documents themselves.
3. you didn't mention which XSL processor you are using, a cardinal sin on
this list due to the differences between the language-known-as-xsl-in-ie5
and real XSLT.
If you're using real XSLT, the answer will probably have these templates in
it:
<xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="*">
<!-- for any element not otherwise matched, copy it -->
<xsl:copy>
<!-- add to copied element its attributes and children -->
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="prop">
<!-- make a number for this 'prop' element -->
<xsl:variable name="propnum">
<xsl:number level="any"/>
</xsl:variable>
<!-- make a 'dsobject' element with a fixed attribute -->
<dsobject type="Collection">
<!-- generate its variable attribute -->
<xsl:attribute name="handle">
<xsl:value-of select="concat('Collection-',string(100 +
number($propnum)))"/>
</xsl:attribute>
<!-- add to 'dsobject' a child 'prop' -->
<xsl:copy>
<!-- add to 'prop' its attributes and children -->
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</dsobject>
</xsl:template>
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list