[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

RE: RE: XPath expression confusion

Subject: RE: RE: XPath expression confusion
From: cknell@xxxxxxxxxx
Date: Thu, 12 Jan 2006 19:47:18 -0500
xsl when exists
Yes, "system" is the root node. I'll try Geert Josten's approach when I get to work tomorrow. If anyone could cast some more light on where I've gone wrong, I'd appreciate it.

Thanks.
--
Charles Knell
cknell@xxxxxxxxxx - email



-----Original Message-----
From:     Xia Li <xli@xxxxxxxxxxxxx>
Sent:     Thu, 12 Jan 2006 15:39:58 -0800
To:       <xsl-list@xxxxxxxxxxxxxxxxxxxxxx>
Subject:  RE:  XPath expression confusion

I just checked the spec. It seems to me that I gave a wrong explanation
about what you might be wrong. The <xsl:otherwise> in your example should be equivalent to <xsl:when
test="not(system/components/component/requirement/@number .)">


So my guess is that something wrong with the path
"/system/components/component/requirement/@number". It seemed to give an
empty sequence.


Is the <system> a root node?


Lisa



-----Original Message-----
From: Xia Li [mailto:xli@xxxxxxxxxxxxx] Sent: Thursday, January 12, 2006 2:53 PM
To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Subject: RE: XPath expression confusion


I think you need to use

<xsl:when test="not(/system/components/component/requirement/@number .)">
	<requirement><xsl:value-of select="." /></requirement>
</xsl:when?

to look for the <number> element which no item in the sequence
"/system/components/component/requirement/@number" would match.


The <xsl:otherwise> in your style sheet is equivalent to the condition

<xsl:when test="/system/components/component/requirement/@number != .">

That means if there exists an item in the sequence selected by
"/system/components/component/requirement/@number" that is not equal to
the current value of <number> in the iteration, the condition is always
true. That is why you output all the value of <number> elements.


Lisa




-----Original Message-----
From: cknell@xxxxxxxxxx [mailto:cknell@xxxxxxxxxx] Sent: Thursday, January 12, 2006 1:49 PM
To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Subject: XPath expression confusion


I have two files structured like this:

File A
-------
<requirements>
 <requirement>
   <number />
     <requirement>
       <number />
       And so on to an arbitrary depth
     </requirement>
 </requirement>
</requirements>

File B
-------
<system>
 <components>
   <component>
     <requirement number="" />
     <requirement number="" />
     <requirement number="" />
   </component>
 </components>
</system>

There will be an arbitrary number of components, each with an arbitrary
number of requirements.

My goal is to produce a document containing all the requirement/number
elements from File A that don't have a matching requirement/@number in
File B.

My unsuccessful approach is represented in this stylesheet fragment:

<xsl:variable name="all-reqs"
select="document('requirements.xml')/requirements//requirement/number"
/>

 <xsl:template match="/">
   <un-assigned-reqs>
     <xsl:for-each select="$all-reqs">
       <xsl:choose>
         <xsl:when
test="/system/components/component/requirement/@number = ." />
         <xsl:otherwise>
           <requirement><xsl:value-of select="." /></requirement>
         </xsl:otherwise>
       </xsl:choose>
     </xsl:for-each>
   </un-assigned-reqs>
 </xsl:template>

It was my belief that the XPath expression in the test would search all
the number attribute values in the document for a value that matched the
value of the current iteration of the loop.
Instead, it seems that there are no matches, as I get one element output
for each iteration of the loop.

Can someone point out where I'm going wrong?

Thanks.

--
Charles Knell
cknell@xxxxxxxxxx - email

Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.