This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
Re: simple XPath question
- To: xsl-list at lists dot mulberrytech dot com
- Subject: Re: [xsl] simple XPath question
- From: James Melton <james dot melton at cylogix dot com>
- Date: Mon, 02 Jul 2001 18:00:43 -0400
- References: <006901c10338$371d6610$86230240@siliconage.com>
- Reply-To: xsl-list at lists dot mulberrytech dot com
The match='country[1]' will match any country which is the first country
node of its parent. Both "country" elements are the first "country"
elements of their parent "item" nodes, so both are output inside a
"first-country" element. If you were to add another "country" node
inside of either "item" node you would see that it is not wrapped in a
"first-country" element.
As another bizarre bit, I tested this by adding a country after the "US"
country, and left in your <xsl:copy-of select='position()'/> code. I
found that the number displayed corresponds to the number of countries,
and not the number of "first" countries; i.e. with this input:
<?xml version='1.0'?>
<warehouse>
<item>
<name>orange</name>
<country>US</country>
<country>UK</country>
</item>
<item>
<name>ice wine</name>
<country>Canada</country><country>UK</country>
</item>
</warehouse>
I get this output:
<?xml version="1.0" encoding="UTF-8"?>
<storage>
<first-country>1<country>US</country>
</first-country>
<country>UK</country>
<first-country>3<country>Canada</country>
</first-country>
<country>UK</country>
</storage>
I wonder if you get the same thing with Saxxon - I'm using xalan-j 2.0.
Jim.
Chris Nolte wrote:
>
> I am trying to work through an example in Khun Yee Fung's XSLT book. It is
> not giving me the solution he claims it should, but I do not understand why
> not.
>
> Here is the sample XML:
> <?xml version='1.0'?>
> <warehouse>
> <item>
> <name>orange</name>
> <country>US</country>
> </item>
> <item>
> <name>ice wine</name>
> <country>Canada</country>
> </item>
> </warehouse>
>
> And here is the stylesheet:
> <?xml version='1.0'?>
> <xsl:stylesheet version='1.0'
> xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
> <xsl:output method='xml' indent='yes'/>
>
> <xsl:template match='/'>
> <xsl:apply-templates/>
> </xsl:template>
>
> <xsl:template match='warehouse'>
> <storage>
> <xsl:apply-templates select='item/country'/>
> </storage>
> </xsl:template>
>
> <xsl:template match='country'>
> <xsl:copy-of select='.'/>
> </xsl:template>
>
> <xsl:template match='country[1]'>
> <first-country>
> <xsl:copy-of select='.'/>
> </first-country>
> </xsl:template>
>
> </xsl:stylesheet>
>
> The output I am getting [using Saxon] is:
> <?xml version="1.0" encoding="utf-8"?>
> <storage>
> <first-country>
> <country>US</country>
> </first-country>
> <first-country>
> <country>Canada</country>
> </first-country>
> </storage>
>
> i.e., the first-country template is getting matched both times, even though
> the XPath expression uses country[1]. What seems strange to me is that when
> I include the line <xsl:copy-of select='position()'/> at the beginning of
> the template matching country[1], I get a 1 and a 2.
>
> I believe I am supposed to get:
> <storage>
> <first-country>
> <country>US</country>
> </first-country>
> <country>Canada</country>
> </storage>
>
> Am I doing something wrong, or is the example in Fung's book (Chapter 6, p.
> 149) wrong? How should the stylesheet be structured to get the intended
> output?
>
> Chris
>
> XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
--
____________________________________________________________
James Melton CyLogix
609.750.5190 609.750.5100
james.melton@cylogix.com www.cylogix.com
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list