Viewing file: dc_20001112.py (1.68 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
#David Carlisle <davidc@nag.co.uk> plays nifty tricks with xsl:key
from Xml.Xslt import test_harness
sheet_1 = """<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" >
<xsl:output method="xml" indent="yes"/>
<xsl:key name="items-by-itemid" match="item" use="concat(generate-id(..), @itemid)" />
<xsl:template match="itemlist"> <xsl:variable name="x" select="generate-id(.)"/> <xsl:for-each select="item[count(. | key('items-by-itemid', concat($x, @itemid))[1]) = 1]">
<xsl:sort select="@itemid" /> <tr> <td><xsl:value-of select="@itemid"/></td> <td><xsl:value-of select="sum(key('items-by-itemid', concat($x, @itemid))/@units)"/></td> </tr> </xsl:for-each> </xsl:template>
<xsl:template match='text()'/>
</xsl:stylesheet>"""
source_1 = """<x> <itemlist> <item itemid="Z101" units="1"/> <item itemid="Z102" units="2"/> <item itemid="Z101" units="4"/> </itemlist>
<itemlist> <item itemid="y101" units="1"/> <item itemid="y102" units="2"/> <item itemid="y102" units="3"/> <item itemid="y101" units="4"/> <item itemid="y101" units="5"/> </itemlist>
</x>"""
expected_1 = """<?xml version="1.0" encoding="UTF-8"?> <tr> <td>Z101</td> <td>5</td> </tr> <tr> <td>Z102</td> <td>2</td> </tr> <tr> <td>y101</td> <td>10</td> </tr> <tr> <td>y102</td> <td>5</td> </tr>"""
def Test(tester): source = test_harness.FileInfo(string=source_1) sheet = test_harness.FileInfo(string=sheet_1) test_harness.XsltTest(tester, source, [sheet], expected_1) return
|