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: "Michael Kay" <mhkay at iclway dot co dot uk>
- Date: Mon, 2 Jul 2001 23:35:41 +0100
- Reply-To: xsl-list at lists dot mulberrytech dot com
Both of the <country> elements are the first <country> within their parent
element, so they both match the pattern match="country[1]". If you want to
match a country that is within the first <item> in a warehouse, you could
write match="warehouse/item[1]/country".
Mike Kay
> -----Original Message-----
> From: owner-xsl-list@lists.mulberrytech.com
> [mailto:owner-xsl-list@lists.mulberrytech.com]On Behalf Of Chris Nolte
> Sent: 02 July 2001 21:47
> To: xsl-list@lists.mulberrytech.com
> Subject: [xsl] simple XPath question
>
>
> 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
>
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list