[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: does an element have a unique id?, and a problem t

Subject: Re: does an element have a unique id?, and a problem to solve
From: Jeni Tennison <jeni@xxxxxxxxxxxxxxxx>
Date: Fri, 16 Aug 2002 12:50:11 +0100
css unique id
Hi Thomas,

> 1) how to specifiy parameter in XSLT in Cocoon so that it works also
> when no parameter is given; I've added:
>
>   <map:match pattern="*/*-*">
>     <map:generate src="content/{1}/{2}.xml"/>
>     <map:transform src="transforms/inners.xsl">
>         <map:parameter name="param" value="{3}"/>
>         <map:parameter name="css-stylesheet" value="default.css"/>
>     </map:transform>
>     <map:serialize type="html"/>
>   </map:match>
>
> so, it works when there is a "*/*-1" but comes to an error when
> typing "*/*", however I would like to declare in XSL that if there
> is no param ("-*"), use the first <content/>. I don't know how to
> make it work this way. (???)

I'm a little rusty on Cocoon, but what about having a separate match
like:

  <map:match pattern="*/*">
    <map:generate src="content/{1}/{2}.xml" />
    <map:transform src="transforms/inners.xsl">
      <map:parameter name="param" value="1" />
      <map:parameter name="css-stylesheet" value="default.css" />
    </map:transform>
  </map:match>

Put this *after* the match you already have, as it's a more general
pattern and Cocoon uses the first available match.
  
Or perhaps you can use the regexp URI matcher rather than the wildcard
URI matcher?
  
> 2) I've tried to use the postion() for specifing the parameter to
> render with the special formating as follows:
>
>     <xsl:for-each select = "content[position() != $firstcontent]">
>      <xsl:if test = "position() mod 2 = 0">
>      <p/><h3><xsl:value-of select="header1"/></h3>
>      <xsl:value-of select="concat(substring-before(para, '.'),
> '.')"/>&#160;<a href="{position()}" class="navigators">&#x00BB;</a>
>       </xsl:if>
>  </xsl:for-each>
>
> but in case of $firstcontent=2 the for-each will not list it, and
> position will start from 1, so position() doesn't show the original
> listed id/position as it is in the XML doc. Beyond adding an
> attribute to the element in the XML for specifing a unique
> identifier, is there something else how I can find out the original
> XML content position number?

You could use xsl:number to give you the position, or calculate it by
counting the number of preceding sibling content elements there are
and adding 1:

  count(preceding-sibling::content) + 1

> What's make it hard, so that a simple for-each for only "content"
> won't work, is that I have 2 columns, and if I use only the content
> for-each list and display every odd and even position(), than incase
> of a $firstcontent=2 and having 5 <content/> the first column will
> have pos:1,3,5 and the second column will have pos: 4, but what I'd
> like to show is that every second <content/> goes to the same column
> => column1 will have: pos:1, 4 and column2 will have pos: 3,5.

Sure. I think that the above will work fine if you use the count() to
give you the number-amongst-all-content elements and position() to
give you the position to determine where it should go in the table.

Cheers,

Jeni

---
Jeni Tennison
http://www.jenitennison.com/


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.