This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
RE: Re[2]: finding position() of an element in a different context
- To: <xsl-list at lists dot mulberrytech dot com>
- Subject: RE: Re[2]: [xsl] finding position() of an element in a different context
- From: "John Wang" <jwang at mincron dot com>
- Date: Thu, 26 Apr 2001 12:36:27 -0500
- Reply-To: xsl-list at lists dot mulberrytech dot com
Here is possible correction, I am not sure this is what you want.
xml:
<?xml version="1.0"?>
<top>
<visits>
<visit id="visit1Name"/>
<visit id="visit2Name"/>
</visits>
<formtypes>
<formtype id="formtype1Name"/>
<formtype id="formtype2Name"/>
</formtypes>
<forms>
<form visitID="visit1Name" formtypeID="formtype1Name">form1</form>
<form visitID="visit1Name" formtypeID="formtype2Name">form2</form>
<form visitID="visit2Name" formtypeID="formtype3Name">form3</form>
</forms>
</top>
xsl:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"/>
<xsl:variable name="formtypeID">formtype2Name</xsl:variable>
<xsl:variable name="visitID">visit1Name</xsl:variable>
<xsl:template match="/">
<html>
<body>
<xsl:variable name="matchingForm" select="//forms/form[(@formtypeID =
$formtypeID) and (@visitID = $visitID)]"/>
<xsl:value-of select="$matchingForm"/>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
This xsl will pick up one entry which is "form2"
-John
-----Original Message-----
From: owner-xsl-list@lists.mulberrytech.com
[mailto:owner-xsl-list@lists.mulberrytech.com]On Behalf Of Kevin Burges
Sent: Wednesday, April 25, 2001 2:56 PM
To: Oliver Becker
Subject: Re[2]: [xsl] finding position() of an element in a different
context
Hi Oliver,
OB> Just count the preceding siblings:
OB> count($matchingForm/preceding-sibling::*)+1
they might not always be siblings, but I could probably just use
preceding:: to do the job.
I've remembered another part of the problem. Look at the structure
again:
<top>
<visits>
<visit id="visit1Name"/>
<visit id="visit2Name"/>
</visits>
<formtypes>
<formtype id="formtype1Name"/>
<formtype id="formtype2Name"/>
</visits>
<forms>
<form visit="visit1Name" formtype="formtype1Name"/>
<form visit="visit1Name" formtype="formtype2Name"/>
<form visit="visit2Name" formtype="formtype2Name"/>
</forms>
</top>
Am I not right in saying that if I am in the context of a <visit>
element, doing:
<xsl:variable name="matchingForm"
select="//forms/form[(@formtypeID = $formtypeID) and (@visitID =
$visitID)]"/>
will not work, because "//forms" is taken relative to the context
node? Certainly this seems to be happening, as no matches are
occurring.
Is there a way to make this work?
--
groovy baby,
Kevin mailto:xmldude@burieddreams.com
++++++++++++ Cool music - http://mp3.com/marshan
++++++ Attitude Webzine - http://burieddreams.com/attitude
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list