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

Re: xsl:key only checks first child, need to check all

Subject: Re: xsl:key only checks first child, need to check all
From: Patrick Warren <warr0120@xxxxxxx>
Date: Fri, 04 Nov 2005 21:09:36 -0600
key only
Alright, I've trimmed down the xml and xsl. The problem again is that I can't get rid of duplicates using the Muench method, and I have no idea how else to do it. I repeat my question at the end.

Here's the xml:

<sources>
<source>
<authors>
<author><name>Deloria, Ella C.</name></author>
<author><name>Rice, Julian</name></author>
</authors> <topics>
<topic>texts</topic>
<topic>culture</topic>
</topics>
</source>
<source>
<authors>
<author><name>Deloria, Ella C.</name></author>
<author><name>Rice, Julian</name></author>
</authors> <topics>
<topic>texts</topic>
<topic>culture</topic>
</topics>
</source>


</sources>

Here's the xsl:

<xsl:key name = "topics" match = " topic " use = " . " />
<xsl:key name = "authorsByTopicAndAuthor" match = " author / name " use = " concat ( .. / .. / .. / topics / topic , . ) " />


<xsl:template match = "/" >
<html>
<xsl:for-each select = "// sources / source / topics / topic [ count ( . | key ( 'topics' , . ) [ 1 ] ) = 1 ] " >
<xsl:sort select = " . " />
<xsl:variable name = "currentTopic" select = " . " />


                   <xsl:value-of select = " $currentTopic " />
                   <br />

<xsl:for-each select = " // sources / source [ topics / topic = $currentTopic ] / authors / author / name [ count ( . | key ( 'authorsByTopicAndAuthor' , concat ( $currentTopic , . ) ) [ 1 ] ) = 1 ] " >
<xsl:sort select = " . " />
<xsl:variable name = "currentAuthor" select = "." />
<xsl:text>-----</xsl:text>
<xsl:value-of select = " $currentAuthor " />
<br />
</xsl:for-each>


               </xsl:for-each>
       </html>
   </xsl:template>


Here's the output in firefox:


culture
-----Deloria, Ella C.
-----Deloria, Ella C.
-----Rice, Julian
-----Rice, Julian
texts
-----Deloria, Ella C.
-----Rice, Julian


Here's the output I want:


culture
-----Deloria, Ella C.
-----Rice, Julian
texts
-----Deloria, Ella C.
-----Rice, Julian

The key 'authorsByTopicAndAuthor' is only checking ../../../topics/topic[1] but I want it to match each topic([2], [3]. etc.), so any author of a source with a topic equal to the currentTopic is only listed once. Right now it's only checking to see if the first topics/topic matches currentTopic. The Muench method seems to work fine to any depth if the relationship (author-topic in this case) is one-to-one or one-to-many, but not if it's many-to-many (a source can have multiple authors and multiple topics). How can I deal with this problem?

Thanks again,
Patrick

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.