Subject: RE: [xsl] recursive counter not incrementing From: "Michael Kay" <mike@xxxxxxxxxxxx> Date: Thu, 9 Dec 2004 10:05:23 -0000 |
> David > Ultimately i am trying to check if the items in $s1 can also > be found in $s2. > For example - > $s1 would consist of 2 items, $s1/item/Milk and $s1/item/Sugar > $s2 would consist of 10 different items, Milk and Sugar are > among them. In predicate logic that's for each ITEM1 in $s1 there exists ITEM2 in $s2 such that ITEM1 = ITEM2 or in XPath 2: every $I1 in $s1 satisfies some $I2 in $s2 satisfies $I1 eq $I2 In XPath 1 the equivalent of "some" can be achieved with $s2[predicate] and the equivalent of "every" can be achieved with not($s1[not(predicate)]) but without range variables, you can't combine the two conditions into a single expression. However, there's another tool in the kitbag: the "existential equals". The "=" operator, and its friends, compare two sets, rather than just singletons. A=B is true if some pair of items from A and B are equal So you can write not($s1[not(item = $s2/item)]) which I think tests the condition you are looking for. Michael Kay http://www.saxonica.com/ > I've accomplished this using the for-each loop you suggested, however > i need a way to signal that ALL items have been found after the loop, > and not only some of them. > > I'm thinking something like: > > <xsl:for-each select="$s1/item[.=$s2/item]"> > <!--now, try to place the items that it found matches for, into a > nodeset and compare it to the original $s1 itemset. If the results > from the for-each loop and the $s1 itemset contain the same items, > output COMPLETE MATCH--> > > However, i'm not sure how to accomplish getting every matched item it > finds into a nodeset of some sort that i can use for a comparison > later on. Any help would be appreciated...I'm a beginner and > frustration is setting in, but so far you guys have helped me a good > deal. Thanks. > > Chris > > On Wed, 8 Dec 2004 22:41:37 GMT, David Carlisle > <davidc@xxxxxxxxx> wrote: > > > > It's not clear why you are using recursion rather than just using > > postion() or count to get this number, but perhaps that's > just because > > you have cut the example down, I didn't follow all the logic of your > > stylesheet but can comment on some lines: > > > > <xsl:with-param name="s1" > > select="$s1/item[following-sibling]"/> > > > > That selects all items that have a child called > following-sibling so it > > will be empty, I don't know which nodes you mean to select here but > > perhaps > > select="following-sibling::*" > > > > <xsl:for-each select="$s1/item"> > > <xsl:variable name="sub1" select="."/> > > > > <xsl:for-each select="$s2/item"> > > <xsl:if test="$sub1 = . "> > > > > > > This is rather strange, it loops through all pairs of items in s1 > > and s1 but only does anything if the items are equal > > so you could just select those pairs with a single xpath: > > <xs:for-each select="$s2/item[.=$s1/item]"> > > > > which is more compact to write and at least gives the > system a chance of > > being a bit more efficient. > > > > It seems that you want to use an integer counter as your > main control > > and repeatedly pass the whole of yor set $s1 and keep > accessing $s1[$i] > > this isn't the usual XSL way, normally you would just > simply pass the > > current node as a parameter, and then move control to teh following > > sibling, without ever needing your integer position variable. > > > > David > > > > > ______________________________________________________________ > __________ > > This e-mail has been scanned for all viruses by Star. The > > service is powered by MessageLabs. For more information on > a proactive > > anti-virus service working around the clock, around the > globe, visit: > > http://www.star.net.uk > > > ______________________________________________________________ > __________
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] recursive counter not inc, Christopher Hansen | Thread | Re: [xsl] recursive counter not inc, David Carlisle |
Re: [xsl] XSL-FO insert a blank lin, David Tolpin | Date | Re: [xsl] recursive counter not inc, David Carlisle |
Month |