Subject: Re: [xsl] simple XPath question From: James Melton <james.melton@xxxxxxxxxxx> Date: Mon, 02 Jul 2001 18:00:43 -0400 |
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@xxxxxxxxxxx www.cylogix.com XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] simple XPath question, Thomas B. Passin | Thread | Re: [xsl] simple XPath question, Chris Nolte |
Re: [xsl] simple XPath question, Thomas B. Passin | Date | RE: [xsl] simple XPath question, Michael Kay |
Month |