|
Subject: [xsl] Confusion about preceding-sibling axis From: "SCOTT, Darren, FM" <Darren.Scott@xxxxxxxx> Date: Mon, 9 Apr 2001 12:34:57 +0100 |
I'm a little confused about the preceding-sibling axis (or at least my
experience of it). Hopefully someone can point out my mistakes...
My original problem that required the use of the preceding-sibling axis was
to select a unique list of elements (using the familiar
*[not(@name=preceding-sibling::*/@name)] XPath pattern). I got unexpected
results so I simplified the XML and XSLT to investigate what was happening
(particularly with respect to using the preceding-sibling axis).
Consider the following simplified source XML:
<?xml version="1.0"?>
<root>
<level1 id="1">
<level2>
<item>first item</item>
<item>second item</item>
<item>third item</item>
</level2>
</level1>
<level1 id="2">
<level2>
<item>fourth item</item>
<item>fifth item</item>
<item>sixth item</item>
</level2>
</level1>
</root>
To visualise how the preceding-sibling axis works, I wrote the following
XSLT:
<xsl:template match="root">
<xsl:variable name="item_list" select="//item"/> <html>
<body>
<xsl:for-each select="$item_list">
<p><b><xsl:value-of select="."/></b><br/>
<xsl:choose>
<xsl:when test="count(preceding-sibling::*) < 1">No preceding
siblings<br/></xsl:when>
<xsl:otherwise>Preceding siblings are:
<xsl:for-each select="preceding-sibling::*">
<xsl:value-of select="."/> 
</xsl:for-each>
</xsl:otherwise>
</xsl:choose>
</p>
</xsl:for-each>
</body>
</html>
</xsl:template>
I first create a variable, item_list, to contain all item elements. I then
visit each element in this list, displaying both it and its preceding
siblings.
What I would expect to see as output is:
first
No preceding siblings
second
Preceding siblings are: first
third
Preceding siblings are: first second
fourth
Preceding siblings are: first second third
fifth
Preceding siblings are: first second third fourth
sixth
Preceding siblings are: first second third fourth fifth
What I actually see though is:
first
No preceding siblings
second
Preceding siblings are: first
third
Preceding siblings are: first second
fourth
No preceding siblings
fifth
Preceding siblings are: fourth
sixth
Preceding siblings are: fourth fifth
Why is this so?
Once I'd created the item_list variable and used this for the <xsl:for-each>
I expected all item elements to have the same ancestor and therefore all be
siblings of each other. The results suggest that the original document
hierarchy is being used instead.
Am I missing something really obvious here?!
Thanks,
Darren Scott
********************************************************************
Visit our Internet site at http://www.rbsmarkets.com
This e-mail is intended only for the addressee named above.
As this e-mail may contain confidential or privileged information,
if you are not the named addressee, you are not authorised to
retain, read, copy or disseminate this message or any part of it.
********************************************************************
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Re: [xsl] How to preserve white spa, Mike Brown | Thread | Re: [xsl] Confusion about preceding, Jeni Tennison |
| Re: [xsl] recursivly applying a tra, M.A. Voetberg | Date | Re: [xsl] recursivly applying a tra, Trevor Nash |
| Month |