XML Editor
Sign up for a WebBoard account Sign Up Keyword Search Search More Options... Options
Chat Rooms Chat Help Help News News Log in to WebBoard Log in Not Logged in
Conferences Close Tree View
+ Stylus Studio Feature Requests (1192)
+ Stylus Studio Technical Forum (14621)
+ Website Feedback (249)
- XSLT Help and Discussion (7625)
-> + Use of before and after string (3) Sticky Topic
-> - How do I substitute element ty... (1)
-> + How does one add working days ... (4)
-> - Help, I have existing XLT and... (1)
-> + Need help on XSLT issue - (2)
-> + EDI to XML Conversion (7)
-> - XML To JSON Conversion using X... (1)
-> + Formatting Paragraphs to same ... (2)
-> - Grouping of records (1)
-> + Problems with xsd 1.1 (4)
-> + XML to HL7 mapping (3)
-> + XSLT 3 and Iterate (2)
-> + XSL-FO to PDF preview (3)
-> + java.lang.RuntimeException: Er... (2)
-> + Create Acroforms with Stylus X... (2)
-> + How to change XSLT parameter s... (3)
-> + how to change format of the da... (2)
-> + Search "Next 8 Results " doesn... (2)
-> - Support for Git (1)
-> + newbee (8)
-- [1-20] [21-40] [41-60] Next
+ XQuery Help and Discussion (2016)
+ Stylus Studio FAQs (159)
+ Stylus Studio Code Samples & Utilities (364)
+ Stylus Studio Announcements (113)
Topic  
Postnext
James DurningSubject: Indexing by group?
Author: James Durning
Date: 12 Nov 2004 02:10 PM
I've got a structure like
<links>
<linktype1>
<link parent="1" target="3"/>
<link parent="1" target="4"/>
<link parent="1" target="5"/>
<link parent="2" target="6"/>
<link parent="2" target="7"/>
</linktype1>
<linktype2>
<link parent="3" target="8"/>
<link parent="1" target="9"/>
</linktype2>
...
</links>
The final simplified structure looks like:
<links>
<link parent="1" order="1" target="3"/>
<link parent="1" order="2" target="4"/>
<link parent="1" order="3" target="5"/>
<link parent="2" order="1" target="6"/>
<link parent="2" order="2" target="7"/>
<link parent="3" order="1" target="8"/>
<link parent="1" order="1" target="9"/>
...
<links>
However, I am missing the last link (parent=1, target=9)
I need other to be the index based on the parent. what I have now uses the Muenchian method and then uses the position() to get the order. The actual 'links' contain much more information, and involve copying complex nodes..

<xsl:key name="linkbyparent" match="link" use="@parent" />
<xsl:variable name="merged">
<links>
<xsl:for-each select="*\link[count(. | key('linkbyparent', @parent)[1]) = 1]">
<xsl:for-each select="key('linkbyparent', @parent)">
<link>
<xsl:copy-of "@*"/>
<xsl:attribute name="order"><xsl:value-of select="position()"/></xsl:attribute>
</link>
</xsl:for-each>
</xsl:for-each>
</xsl:variable>

-----
<xsl:for-each select="*\link[count(. | key('linkbyparent', @parent)[1]) = 1]">
seems to be the problem line.. anyone know a different method, or one that doesn't use key?

Posttop
Ivan PedruzziSubject: Indexing by group?
Author: Ivan Pedruzzi
Date: 14 Nov 2004 10:01 PM
Hi James,

If I have understood what you are trying to do the following
should help

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:key name="linkbyparent" match="link" use="concat(@parent, local-name(..) )"/>
<xsl:template match="/">
<links>
<xsl:for-each select="*/*/link[count(. | key('linkbyparent', concat(@parent, local-name(..) ) )[1]) = 1]">
<xsl:for-each select="key('linkbyparent', concat(@parent, local-name(..) ) )">
<link>
<xsl:copy-of select="@*"/>
<xsl:attribute name="order">
<xsl:value-of select="position()"/>
</xsl:attribute>
</link>
</xsl:for-each>
</xsl:for-each>
</links>
</xsl:template>
</xsl:stylesheet>

Ivan

   
Download A Free Trial of Stylus Studio 6 XML Professional Edition Today! Powered by Stylus Studio, the world's leading XML IDE for XML, XSLT, XQuery, XML Schema, DTD, XPath, WSDL, XHTML, SQL/XML, and XML Mapping!  
go

Log In Options

Site Map | Privacy Policy | Terms of Use | Trademarks
Stylus Scoop XML Newsletter:
W3C Member
Stylus Studio® and DataDirect XQuery ™are from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2016 All Rights Reserved.