[lxml-dev] broken document('') in xslt ..
Stefan Behnel
stefan_ml at behnel.de
Mon Dec 3 22:24:44 CET 2007
Hi,
Brad Clements wrote:
> I am having trouble with a transform on 2.0alpha5 (and 2.0alpha3). It
> works on a system with a newer libxml2/libxslt,
> but fails on a slightly older libxml2/libxslt. However when using
> xsltproc on the "older" system, the transform works.
> So I think maybe there is an issue with custom resolvers.
I added the following test case, which works for me on the current lxml 2.0
trunk and also on 2.0alpha5 using libxml2 2.6.20-30 and libxslt 1.1.15-22.
Is there anything you do different?
Stefan
def test_xslt_document_XML_resolver(self):
assertEquals = self.assertEquals
called = {'count' : 0}
class TestResolver(etree.Resolver):
def resolve(self, url, id, context):
assertEquals(url, 'file://ANYTHING')
called['count'] += 1
return self.resolve_string('<CALLED/>', context)
parser = etree.XMLParser()
parser.resolvers.add(TestResolver())
xslt = etree.XSLT(etree.XML("""\
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:l="local">
<xsl:template match="/">
<test>
<xsl:for-each select="document('')//l:data/l:entry">
<xsl:copy-of select="document('file://ANYTHING')"/>
<xsl:copy>
<xsl:attribute name="value">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:copy>
</xsl:for-each>
</test>
</xsl:template>
<l:data>
<l:entry>A</l:entry>
<l:entry>B</l:entry>
</l:data>
</xsl:stylesheet>
""", parser))
self.assertEquals(called['count'], 0)
result = xslt(etree.XML('<a/>'))
self.assertEquals(called['count'], 1)
root = result.getroot()
self.assertEquals(root.tag,
'test')
self.assertEquals(len(root), 4)
self.assertEquals(root[0].tag,
'CALLED')
self.assertEquals(root[1].tag,
'{local}entry')
self.assertEquals(root[1].text,
None)
self.assertEquals(root[1].get("value"),
'A')
self.assertEquals(root[2].tag,
'CALLED')
self.assertEquals(root[3].tag,
'{local}entry')
self.assertEquals(root[3].text,
None)
self.assertEquals(root[3].get("value"),
'B')
More information about the lxml-dev
mailing list