diff --git a/ChangeLog b/ChangeLog index d4d2e9c950644c9aff98393768b9ad669c57295e_Q2hhbmdlTG9n..57eb514612470ad6097d3300d9d8a173caf8710f_Q2hhbmdlTG9n 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +Thu Nov 14 10:03:12 CET 2002 Daniel Veillard <daniel@veillard.com> + + * libxslt/functions.c: make sure the fixup for key() reported + by John Escott actually works. + * tests/docs/Makefile.am tests/docs/bug-98.xml + tests/general/Makefile.am tests/general/bug-98.*: added the + example in the regression tests for this case + Wed Nov 13 10:35:46 CET 2002 Daniel Veillard <daniel@veillard.com> * libxslt/pattern.c: fixes bug #97969 for @*[...] patterns diff --git a/libxslt/functions.c b/libxslt/functions.c index d4d2e9c950644c9aff98393768b9ad669c57295e_bGlieHNsdC9mdW5jdGlvbnMuYw==..57eb514612470ad6097d3300d9d8a173caf8710f_bGlieHNsdC9mdW5jdGlvbnMuYw== 100644 --- a/libxslt/functions.c +++ b/libxslt/functions.c @@ -270,4 +270,5 @@ return; } + obj2 = valuePop(ctxt); xmlXPathStringFunction(ctxt, 1); @@ -273,5 +274,4 @@ xmlXPathStringFunction(ctxt, 1); - obj2 = valuePop(ctxt); if ((obj2 == NULL) || (ctxt->value == NULL) || (ctxt->value->type != XPATH_STRING)) { xsltTransformError(xsltXPathGetTransformContext(ctxt), NULL, NULL, @@ -283,7 +283,7 @@ } obj1 = valuePop(ctxt); - if (obj2->type == XPATH_NODESET) { + if ((obj2->type == XPATH_NODESET) || (obj2->type == XPATH_XSLT_TREE)) { int i; xmlXPathObjectPtr newobj, ret; diff --git a/tests/docs/Makefile.am b/tests/docs/Makefile.am index d4d2e9c950644c9aff98393768b9ad669c57295e_dGVzdHMvZG9jcy9NYWtlZmlsZS5hbQ==..57eb514612470ad6097d3300d9d8a173caf8710f_dGVzdHMvZG9jcy9NYWtlZmlsZS5hbQ== 100644 --- a/tests/docs/Makefile.am +++ b/tests/docs/Makefile.am @@ -97,6 +97,7 @@ bug-95.xml \ bug-96.xml \ bug-97.xml \ + bug-98.xml \ character.xml \ array.xml \ items.xml diff --git a/tests/docs/bug-98.xml b/tests/docs/bug-98.xml new file mode 100644 index 0000000000000000000000000000000000000000..57eb514612470ad6097d3300d9d8a173caf8710f_dGVzdHMvZG9jcy9idWctOTgueG1s --- /dev/null +++ b/tests/docs/bug-98.xml @@ -0,0 +1,10 @@ +<?xml version="1.0"?> +<root> + <list type="one"/> + <list type="two"/> + <entries> + <entry cat1="a" cat2="a" qty="1"/> + <entry cat1="a" cat2="b" qty="2"/> + <entry cat1="b" cat2="b" qty="3"/> + </entries> +</root> diff --git a/tests/general/Makefile.am b/tests/general/Makefile.am index d4d2e9c950644c9aff98393768b9ad669c57295e_dGVzdHMvZ2VuZXJhbC9NYWtlZmlsZS5hbQ==..57eb514612470ad6097d3300d9d8a173caf8710f_dGVzdHMvZ2VuZXJhbC9NYWtlZmlsZS5hbQ== 100644 --- a/tests/general/Makefile.am +++ b/tests/general/Makefile.am @@ -101,6 +101,7 @@ bug-95.out bug-95.xsl \ bug-96.out bug-96.xsl \ bug-97.out bug-97.xsl \ + bug-98.out bug-98.xsl \ character.out character.xsl \ character2.out character2.xsl \ itemschoose.out itemschoose.xsl \ diff --git a/tests/general/bug-98.out b/tests/general/bug-98.out new file mode 100644 index 0000000000000000000000000000000000000000..57eb514612470ad6097d3300d9d8a173caf8710f_dGVzdHMvZ2VuZXJhbC9idWctOTgub3V0 --- /dev/null +++ b/tests/general/bug-98.out @@ -0,0 +1,6 @@ +<?xml version="1.0"?> +<result> + <total><type>one</type><a>3</a><b>3</b></total> + <total><type>two</type><a>1</a><b>5</b></total> + +</result> diff --git a/tests/general/bug-98.xsl b/tests/general/bug-98.xsl new file mode 100644 index 0000000000000000000000000000000000000000..57eb514612470ad6097d3300d9d8a173caf8710f_dGVzdHMvZ2VuZXJhbC9idWctOTgueHNs --- /dev/null +++ b/tests/general/bug-98.xsl @@ -0,0 +1,31 @@ +<?xml version="1.0"?> +<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> + <xsl:output method="xml" indent="yes"/> + <xsl:template match="/"> + <result> + <xsl:apply-templates/> + </result> + </xsl:template> + <xsl:key name="k1" match="entry" use="@cat1"/> + <xsl:key name="k2" match="entry" use="@cat2"/> + <xsl:template match="list"> + <xsl:variable name="k"> + <xsl:choose> + <xsl:when test="@type='one'">k1</xsl:when> + <xsl:otherwise>k2</xsl:otherwise> + </xsl:choose> + </xsl:variable> + <total> + <type> + <xsl:value-of select="@type"/> + </type> + <a> + <xsl:value-of select="sum( key($k,'a')/@qty )"/> + </a> + <b> + <xsl:value-of select="sum( key($k,'b')/@qty )"/> + </b> + </total> + </xsl:template> + <xsl:template match="entries"/> +</xsl:stylesheet>