Subject: Re: [xsl] simple XPath question From: "Thomas B. Passin" <tpassin@xxxxxxxxxxxx> Date: Mon, 2 Jul 2001 17:51:18 -0400 |
I got the same result as you with both Saxon and msxml3. Here's a way I like, but it gives a slightly different output from what you suggest: <xsl:template match='country'> <xsl:choose> <xsl:when test='position()=1'> <first-country> <xsl:value-of select='.'/> </first-country> </xsl:when> <xsl:otherwise> <xsl:copy-of select='.'/> </xsl:otherwise> </xsl:choose> </xsl:template> The result: <storage> <first-country>US</first-country> <country>Canada</country> </storage> I've hit this behavior of xxx[1] once before, if I remember. Mike K or someone will have to lay out for us precisely what xxx[1] is supposed to mean in this context, I never ran it down. Cheers, Tom P [Chris Nolte] > 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? XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Retrieving XML document's, Johannes Döbler | Thread | Re: [xsl] simple XPath question, James Melton |
[xsl] Retrieving XML document's nam, John Putman | Date | Re: [xsl] simple XPath question, James Melton |
Month |