This is the mail archive of the xsl-list@mulberrytech.com mailing list .


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

RE: XML and XSLT


> 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

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]