This is the mail archive of the xsl-list@mulberrytech.com mailing list .


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

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

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]