Subject: RE: simple XPath question
From: "Michael Kay" <mhkay@xxxxxxxxxxxx>
Date: Mon, 2 Jul 2001 23:35:41 +0100
|
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@xxxxxxxxxxxxxxxxxxxxxx
> [mailto:owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx]On Behalf Of Chris Nolte
> Sent: 02 July 2001 21:47
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: 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
| Current Thread |
|
Michael Kay - Mon, 2 Jul 2001 18:37:18 -0400 (EDT) <=
Wendell Piez - Mon, 2 Jul 2001 18:47:10 -0400 (EDT)
|
|