[XSL-LIST Mailing List Archive Home]
[By Thread]
[By Date]
My basic xml looks like this, I dont know how many headers there will be or how many attributes on a matchList, matchItem, actionList or actionItem.
I'm trying to accomplish two things, firstly I need a copy of the document but with the match items sorted by the date attribute, within these matchItems I need the actionItems sorted by their content.
My second requirement is to add some content at the bottom of the result tree, a further child of doc that has content based on the original document, I know how to create the content but not where to put it. If I place a newNode just after xsl:copy in the first template it gets added too many times.
Final result:
The xslt I tried looks like this:
<!-- The Identity Transformation -->
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!-- Whenever you match any node or any attribute -->
<xsl:template match="node()|@*">
<!-- Copy the current node -->
<xsl:copy>
<!-- Including any child nodes it has and any attributes -->
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<!--
Templates to match nodes that need changing go here
-->
<xsl:template match="matchList">
<xsl:copy>
<xsl:for-each select="matchItem">
<xsl:sort select="@date" order="ascending"/>
<xsl:copy-of select="."/>
</xsl:for-each>
</xsl:copy>
</xsl:template>
This has two failings, the last template is never called and the attributes are lost, presumably because I'm using xsl:copy.
Thanks in advance.
--
Joe
_________________________________________________________________
It's fast, it's easy and it's free. Get MSN Messenger today! http://www.msn.co.uk/messenger
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
[xsl] Identity plus sort
Subject: [xsl] Identity plus sort From: "Joe Fawcett" <joefawcett@xxxxxxxxxxx> Date: Thu, 07 Aug 2003 08:36:59 +0100 |
My basic xml looks like this, I dont know how many headers there will be or how many attributes on a matchList, matchItem, actionList or actionItem.
<?xml version="1.0" encoding="utf-8"?> <doc> <header1>h1</header1> <header2>h2</header2> <header3>h3</header3> <matchList att1="val1"> <matchItem date="2003-02-01"> <actionList att1="val1"> <actionItem>2002-02-01</actionItem> <actionItem>2002-03-01</actionItem> <actionItem>2002-01-01</actionItem> </actionList> </matchItem> <matchItem date="2003-01-01"> <actionList att1="val2"> <actionItem>2002-01-01</actionItem> <actionItem>2002-02-01</actionItem> <actionItem>2002-03-01</actionItem> </actionList> </matchItem> <matchItem date="2003-03-01"> <actionList att1="val3"> <actionItem>2002-03-01</actionItem> <actionItem>2002-01-01</actionItem> <actionItem>2002-02-01</actionItem> </actionList> </matchItem> </matchList> </doc>
I'm trying to accomplish two things, firstly I need a copy of the document but with the match items sorted by the date attribute, within these matchItems I need the actionItems sorted by their content.
My second requirement is to add some content at the bottom of the result tree, a further child of doc that has content based on the original document, I know how to create the content but not where to put it. If I place a newNode just after xsl:copy in the first template it gets added too many times.
Final result:
<?xml version="1.0" encoding="utf-8"?> <doc> <header1>h1</header1> <header2>h2</header2> <header3>h3</header3> <matchList att1="val1"> <matchItem date="2003-01-01"> <actionList att1="val2"> <actionItem>2002-01-01</actionItem> <actionItem>2002-02-01</actionItem> <actionItem>2002-03-01</actionItem> </actionList> </matchItem> <matchItem date="2003-02-01"> <actionList att1="val1"> <actionItem>2002-01-01</actionItem> <actionItem>2002-02-01</actionItem> <actionItem>2002-03-01</actionItem> </actionList> </matchItem> </matchItem> <matchItem date="2003-03-01"> <actionList att1="val3"> <actionItem>2002-01-01</actionItem> <actionItem>2002-02-01</actionItem> <actionItem>2002-03-01</actionItem> </actionList> </matchItem> </matchList> <newNode><!-- content --></newNode> </doc>
The xslt I tried looks like this:
<!-- The Identity Transformation -->
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!-- Whenever you match any node or any attribute -->
<xsl:template match="node()|@*">
<!-- Copy the current node -->
<xsl:copy>
<!-- Including any child nodes it has and any attributes -->
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<!--
Templates to match nodes that need changing go here
-->
<xsl:template match="matchList">
<xsl:copy>
<xsl:for-each select="matchItem">
<xsl:sort select="@date" order="ascending"/>
<xsl:copy-of select="."/>
</xsl:for-each>
</xsl:copy>
</xsl:template>
<xsl:template match="actionList"> <xsl:copy> <xsl:for-each select="actionItem"> <xsl:sort select="." order="ascending"/> <xsl:copy-of select="."/> </xsl:for-each> </xsl:copy> </xsl:template> </xsl:stylesheet>
This has two failings, the last template is never called and the attributes are lost, presumably because I'm using xsl:copy.
Thanks in advance.
--
Joe
_________________________________________________________________
It's fast, it's easy and it's free. Get MSN Messenger today! http://www.msn.co.uk/messenger
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] declare xsl parameter, Lionel Crine | Thread | Re: [xsl] Identity plus sort, Armen Martirossian |
[xsl] declare xsl parameter, Lionel Crine | Date | RE: [xsl] Variables, Michael Kay |
Month |