RE: [xsl] Problem with Xpath

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
  • RE: [xsl] Problem with Xpath, (continued)
    • cknell - Wed, 13 Dec 2006 14:05:49 -0500
      • ms - Wed, 13 Dec 2006 11:45:34 -0800 (PST)
    • cknell - Wed, 13 Dec 2006 15:56:05 -0500
      • ms - Wed, 13 Dec 2006 14:10:28 -0800 (PST)
    • cknell - Wed, 13 Dec 2006 18:40:56 -0500 <=
      • ms - Thu, 14 Dec 2006 05:51:58 -0800 (PST)
    • cknell - Thu, 14 Dec 2006 09:19:01 -0500