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

Re: XPath help

Subject: Re: XPath help
From: Francis Norton <francis@xxxxxxxxxxx>
Date: Mon, 13 Nov 2000 09:18:11 +0000
Re: XPath help

edmund mitchell wrote:
> 
> 
> Yes, the Meunchian grouping part & the merging part of the stylesheet worked
> perfectly.  I can't seem to figure out how to output the other elements-the
> ones that were not involved in the grouping/sorting.
> I don't want to re-output the <System name="mail> elements, they have been
> handled properly.  I need to output only the other elements in the document,
> which is why I was/am still asking for help with the XPath to select
> elements that have unduplicated 'name' attribute values.

you're very nearly there - but I suggest that you stop treating the two
as separate tasks. Get the uniquified list of System elements, and for
each (whether it was originally unique or duplicated) get the function
elements which had a System element with current System element's name.

This is one of those occasions where you *can* have the satisfaction of
taking your most complex sub-task as the general problem so that you
solve the simple ones at the same time, rather than having all the hard
work and mess of a multiple solution.

> By the way, thanks for your suggestion earlier towards that end, but when I
> tried your stylesheet against your sample, it didn't gather any nodes, which
> I don't understand.  It looked like a winner.
> 
Err.. it *does* work, with both Saxon and MSXML3 - I cut and pasted the
stylesheet back from the original post, added an <xml:output
indent="yes"/> for legibility, and here are the results:

---
D:\xmlSchema>type t.xml
<weird_doc>
   <System name="ABC">...</System>
   <System name="Whatever">...</System>
   <System name="mail">
      <Function name="Routing DB">...</Function>
      <Function name="client">...</Function>
   </System>
   <System name="mail">
      <Function name="pop3">...</Function>
      <Function name="smtp">...</Function>
   </System>
   <System name="news">...</System>
   <System name="account">...</System>
   <System name="Authentication">...</System>
</weird_doc>
D:\xmlSchema>type t.xsl
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
        <xsl:output indent="yes"/>
        <xsl:key name="systems" match="System" use="@name"/>
        <xsl:template match="/">
                <weird_doc>
                        <xsl:for-each select="//System[generate-id(.) =
generate-id(key('systems', @
name))]">
                                <System>
                                        <xsl:copy-of select="@name"/>
                                        <xsl:copy-of
select="key('systems', @name)/*"/>
                                </System>
                        </xsl:for-each>
                </weird_doc>
        </xsl:template>
</xsl:stylesheet>
D:\xmlSchema>saxon t.xml t.xsl
<?xml version="1.0" encoding="utf-8"?>
<weird_doc>
   <System name="ABC"/>
   <System name="Whatever"/>
   <System name="mail">
      <Function name="Routing DB">...</Function>
      <Function name="client">...</Function>
      <Function name="pop3">...</Function>
      <Function name="smtp">...</Function>
   </System>
   <System name="news"/>
   <System name="account"/>
   <System name="Authentication"/>
</weird_doc>
D:\xmlSchema>
---

Hope this helps -

Francis.
-- 
Francis Norton.

why not?


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


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.