This is the mail archive of the xsl-list@mulberrytech.com mailing list .


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

RE: simple XPath question


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]