RE: Newbie question on XSL and lists

Subject: RE: Newbie question on XSL and lists
From: "Chris Bayes" <Chris@xxxxxxxxxxx>
Date: Fri, 8 Sep 2000 11:15:43 +0100
Michiel,
Try

<xsl:template match="par-f">
	<xsl:apply-templates />
</xsl:template>
<xsl:template match="listing">
	<xsl:if test="./item">
		<xsl:apply-templates select="item" />
	</xsl:if>
	<xsl:if test="not() ./item">
		<xsl:message terminate="yes">ooops</xsl:message>
	</xsl:if>
</xsl:template>
<xsl:template match="item">
	<xsl:if test="./par-f">
		*<xsl:apply-templates select="par-f"/>
	</xsl:if>
	<xsl:if test="not() ./par-f">
		<xsl:message terminate="yes">ooops</xsl:message>
	</xsl:if>
</xsl:template>

or something a bit like it. 
Beginner rule #1 *NEVER* use xsl:for-each

Ciao Chris

XML/XSL Portal 
http://www.bayes.co.uk/xml


>-----Original Message-----
>From: owner-xsl-list@xxxxxxxxxxxxxxxx
>[mailto:owner-xsl-list@xxxxxxxxxxxxxxxx]On Behalf Of Michiel Verhoef
>Sent: 08 September 2000 09:50
>To: xsl-list@xxxxxxxxxxxxxxxx
>Subject: Newbie question on XSL and lists
>
>
>Hi all,
>
>Though I have been reading the XSL list for a while I only recently 
>made my first steps in writing my own XSL style sheets.
>
>Does anybody know of a good tutorial on XSL? I'm sort of experienced
>in writing CSS and (think I) have a decent knowledge of the general
>ideas of stylesheets but I need a manual. Any good book recommendations
>are also welcome.
>
>I ran into a problem which I think has something to do with the structure
>the document I'm trying to display has.
>
>
>In a nutshell the problem structure is this:
>
><par-f>
>  <listing>
>     <item>
>        <par-f>
>     </item>
>     <item>
>        <par-f>
>     </item>
>  </listing>
></par-f>
>
>I am trying to get a listing on my screen (like HTML's <ul>) but only get
>either no
>content of the <par-f> or the content of the <par-f> within <item> twice.
>
>The algoritm should be something like:
>If <par-f> contains a <listing>
>    process the <listing>
>else
>   display the content of <par-f>
>endif
>
>if the <listing> contains <item>
>   process the <item>
>else
>  /* error */
>endif
>
>if the <item> contains a <par-f>
>   process the <par-f>
>else
>  /* error */
>endif
>
>Assuming this idea is reasonably close to reality I haven't got a clue how
>to get
>this done in XSL. Any hints and tips would be very welcome.
>
>Thanks in advance,
>
>Michiel
>
>
>
>Basically my output looks like this:
>
>The data types can be divided into five categories:
>category1;category2;category3;category4;category5. * 
>* 
>* 
>* 
>* 
>category1;category2;category3;category4;category5.
>
>Whereas is should look like:
>
>The data types can be divided into five categories: 
>* category1;
>* category2;
>* category3;
>* category4;
>* category5.
>
>
>My style sheet looks like this:
><?xml version="1.0" ?>
>
><xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"; >
><xsl:template><xsl:apply-templates/></xsl:template>
>
><html>
><head>
><title>Section1</title>
></head>
><body>
><xsl:apply-templates/>
></body>
></html>
>
><xsl:template match="section1">
>	<h2><xsl:value-of select="stitle"/></h2><hr/>
>	<xsl:apply-templates match="introduction"/>
>	<hr/>
></xsl:template>
>
>
><xsl:template match="introduction">
><!--        <xsl:value-of select="par-f"/>
>	<xsl:for-each select="listing">
>		<xsl:apply-templates match="listing"/>
>	</xsl:for-each>-->
>	<xsl:apply-templates/>
>	<xsl:for-each select="par-f">
>		<xsl:apply-templates match="par-f"/>
>	</xsl:for-each>
>
></xsl:template>
>
><xsl:template match="functional-description">
>	<xsl:apply-templates/>
></xsl:template>
>
><xsl:template match="subsection">
>	<h3><xsl:value-of select="stitle"/></h3><hr/>
>	<xsl:apply-templates/>
>        <xsl:for-each select="/par-f">
>	   <xsl:apply-templates match="par-f"/><br/>
>	</xsl:for-each>
></xsl:template>
>
>
><xsl:template match="listing">
>	<xsl:for-each select="item">
>        	<xsl:apply-templates match="item"/>
>	</xsl:for-each>
></xsl:template>
>
><xsl:template match="item">
>	* <xsl:value-of select="/par-f"/> <br/>
></xsl:template>
>
><xsl:template match="par-f">
>        <xsl:value-of/>
>	<xsl:for-each select="listing">
>		<xsl:apply-templates match="listing"/>
>	</xsl:for-each>
></xsl:template>
>
>
></xsl:stylesheet>
>
>
>My content looks like this:
>
><?xml version="1.0"?>
><?xml-stylesheet href="kapdoc.xsl" type="text/xsl"?>
><!DOCTYPE section1 SYSTEM "kapdoc.dtd">
><section1><stitle>Data Model</stitle>
><docsection><stitle><?xm-replace_text {stitle}?></stitle>
><introduction><par-f>The data types can be divided into five categories: 
><listing type="ord">
>   <item><par-f>category1;</par-f></item>
>   <item><par-f>category2;</par-f></item>
>   <item><par-f>category3;</par-f></item>
>   <item><par-f>category4;</par-f></item>
>   <item><par-f>category5.</par-f></item>
>   </listing> </par-f></introduction>
></docsection></section1>
>
>The relevant parts of the DTD are:
>
><!ELEMENT par-f  (#PCDATA|listing)*>
><!ELEMENT listing  (stitle? , item+ )>
><!ELEMENT item  (par-f | listing )+>
>
>
>--
>"If at first you don't succeed, destroy all evidence that you ever tried"
>
>Michiel Verhoef
>
>michielv@xxxxxxxxx
>http://www.xs4all.nl/~michielv/
>
>
> 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