Subject: RE: [xsl] Problem with Xpath From: cknell@xxxxxxxxxx Date: Wed, 13 Dec 2006 18:40:56 -0500 |
You are still describing your output instead of showing it. Please don't ask me to decipher your description in order to re-create what the output should look like. Please send an example (NOT a description) of the output. That means I want to see XML, not: ===================================== 1. First level A. some text 2. Second level That is, the style sheet formats these levels 1 thru 6 with the following 1, A, (1), (a), 1) , a) So if l3's conditions match, then it should be counted as level 2 and not as level3. Hence level 3 should have 'A.' and not (1). But the actual output is: 1. First level (1) some text 2. Second level Also, if suppose the parameters are chnged to Target and Pen, then the desired output is: 1. Second level ================================ So, try again. Send examples of the XML you now get and the XML you want to get and I'll take a crack at it. -- Charles Knell cknell@xxxxxxxxxx - email -----Original Message----- From: ms <mina_hurray@xxxxxxxxx> Sent: Wed, 13 Dec 2006 14:10:28 -0800 (PST) To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx Subject: RE: RE: [xsl] Problem with Xpath Thanks a lot for your help so far. The XML looks like this: <root> <l1> <text> <para>First level</para> </text> <info> <comp>Kmart</comp> <prod>Shoes</prod> </info> <l2> <text> <para>Second level .</para> </text> <l3> <text> <para>some text</para> </text> <info> <comp>Kmart</comp> <prod>Shoes</prod> </info> </l3> </l2> </l1> <l1> <text> <para>Second level</para> <info> <comp>Kmart</comp> <prod>Shoes</prod> </info> </text> </l1> <l1> <text> <para>Third level</para> <info> <comp>Target</comp> <prod>Pen</prod> </info> </text> </l1> </root> I am passing the parameters company and product to the style sheet. If company=Kmart and product = SHoes the output should be: 1. First level A. some text 2. Second level That is, the style sheet formats these levels 1 thru 6 with the following 1, A, (1), (a), 1) , a) So if l3's conditions match, then it should be counted as level 2 and not as level3. Hence level 3 should have 'A.' and not (1). But the actual output is: 1. First level (1) some text 2. Second level Also, if suppose the parameters are chnged to Target and Pen, then the desired output is: 1. Second level Instead, I now get, 2. Second level The XSLT is: <xsl:template match="l1"> <xsl:choose> <xsl:when test=".//info"> <xsl:if test=".//info/company=$company and .//info/product=$product"> <fo:list-block> <fo:list-item> <fo:list-item-label> <fo:block> <xsl:number format="1"/> </fo:block> </fo:list-item-label> <fo:list-item-body> <fo:block> <xsl:apply-templates/> </fo:block> </fo:list-item-body> </fo:list-item> </fo:list-block> </xsl:if> </xsl:when> <xsl:otherwise> <!-- Do something else--> </xsl:otherwise> </xsl:choose> </xsl:template> This template repeats for all 6 levels. --- cknell@xxxxxxxxxx wrote: > <xsl:number> is probably a false friend in this > situation. I have a notion of what you need to do, > but it will be much easier to help if you post an > example (as opposed to the description you gave) of > what the output you are now getting looks like, and > a second example of the output you would like to > get. > -- > Charles Knell > cknell@xxxxxxxxxx - email > > > > -----Original Message----- > From: ms <mina_hurray@xxxxxxxxx> > Sent: Wed, 13 Dec 2006 11:45:34 -0800 (PST) > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx > Subject: RE: [xsl] Problem with Xpath > > Thank you the .//info worked. But I guess I have a > new > problem now, since there is some styling to format > these levels as 1, 2, 3 etc, now if the second<l1> > tag > matched then the numbering starts with 2. instead of > 1. > > Is there any way to start this numebring at 1 > instead > of 2 so that even in between if there are levels > that > have to be missed the numbering stays as 1,2 , 3 and > not 2, 5, ,6 etc. > > Please let me know. > > > > --- cknell@xxxxxxxxxx wrote: > > > Your example XML file does not contain elements > with > > the local names "company" and "product". Your XSLT > > file is looking for them. Naturally it won't find > > them, so the transformation will fail. > > > > This: <xsl:when test="//info"> > > and this: <xsl:if test="//info/company=$company > and > > //info/product=$product"> > > > > are telling your stylesheet to start looking at > the > > root for elements matching the test criteria. > > > > Is that what you want? Or, do you want to look for > > "info" elements that are descendants of the "l1" > > element? > > > > Since the latter makes sense to me and the former > > does not, maybe the XPath expression you are > looking > > for is > > > > <xsl:when test=".//info"> > > and <xsl:if test=".//info/company=$company and > > .//info/product=$product"> > > > > > > N.B., there is a period character before the > > double-slash. That tells your stylesheet to start > at > > the context node (<l1>, in this case) and not at > the > > document root. > > > > Get the element names correct and try these XPath > > expressions, and get back to us if you are still > > having a problem. > > > > -- > > Charles Knell > > cknell@xxxxxxxxxx - email > > > > > > > > -----Original Message----- > > From: ms <mina_hurray@xxxxxxxxx> > > Sent: Wed, 13 Dec 2006 10:39:01 -0800 (PST) > > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx > > Subject: [xsl] Problem with Xpath > > > > Hi all: > > > > I am having issues with Xpath. > > > > My xml looks like this: > > > > <root> > > > > <l1> > > <text> > > <para>First level</para> > > </text> > > <info> > > <comp>Kmart</comp> > > <prod>Shoes</prod> > > </info> > > <l2> > > <text> > > <para>Second level .</para> > > </text> > > </l2> > > </l1> > > <l1> > > <text> > > <para>Second level</para> > > <info> > > <comp>Kmart</comp> > > <prod>Shoes</prod> > > </info> > > </text> > > </l1> > > <l1> > > <text> > > <para>Third level</para> > > <info> > > <comp>Target</comp> > > <prod>Pen</prod> > > </info> > > </text> > > </l1> > > </root> > > > > Now, I have logic in my style sheet which says > that > > only if element <l1> contains element <info>, then > > if <comp> and <prod> values match the values being > > passed to the style sheet through two other > > parameters > > <company> and <product> , then display l1 , > > otherwise > > do not display l1. > > > > The XSLT is : > > > > > > <xsl:template match="l1"> > > <xsl:choose> > > <xsl:when test="//info"> > > <xsl:if test="//info/company=$company and > > //info/product=$product"> > > <fo:list-block> > > <fo:list-item> > > <fo:list-item-label> > > <fo:block> > > <xsl:number format="1"/> > > </fo:block> > > </fo:list-item-label> > > <fo:list-item-body> > > <fo:block> > > <xsl:apply-templates/> > > </fo:block> > > </fo:list-item-body> > > </fo:list-item> > > </fo:list-block> > > </xsl:if> > > </xsl:when> > > <xsl:otherwise> > > <!-- Do something else--> > > </xsl:otherwise> > > </xsl:choose> > > </xsl:template> > > > > So, if I have passed $company="KMart" and > > $product="Shoes" on the style sheet, then the > > expected > > output is: > > > > 1 First > > 2 Second > > > > Instead, it matches only the company and product > for > > the first level and stops there. Can you please > tell > > me what is wrong with the xpath to company and > > product > > on the style sheet? > > > > Thank you in advance for your help. > > > > > > > > > > > > > ____________________________________________________________________________________ > > Do you Yahoo!? > > Everyone is raving about the all-new Yahoo! Mail > > beta. > === message truncated == ____________________________________________________________________________________ Have a burning question? Go to www.Answers.yahoo.com and get answers from real people who know.
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: RE: [xsl] Problem with Xpath, ms | Thread | RE: [xsl] Problem with Xpath, ms |
Re: [xsl] Table border issue, J.Pietschmann | Date | [xsl] XSLT WYSIWYG WEB Editor, Senthilkumaravelan K |
Month |