332
def test_xslt_string_parameters(self):
333
tree = self.parse('<a><b>B</b><c>C</c></a>')
334
style = self.parse('''\
335
<xsl:stylesheet version="1.0"
336
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
337
<xsl:template match="/">
338
<foo><xsl:value-of select="$bar" /></foo>
340
</xsl:stylesheet>''')
342
st = etree.XSLT(style)
343
res = st(tree, bar=etree.XSLT.strparam('''it's me, "Bar"'''))
344
self.assertEquals('''\
345
<?xml version="1.0"?>
346
<foo>it's me, "Bar"</foo>
332
350
def test_xslt_parameter_invalid(self):
333
351
tree = self.parse('<a><b>B</b><c>C</c></a>')
334
352
style = self.parse('''\
647
665
self.assertEquals(self._rootstring(result),
648
666
_bytes('<A>X</A>'))
668
def test_variable_result_tree_fragment(self):
669
tree = self.parse('<a><b>B</b><b/></a>')
670
style = self.parse('''\
671
<xsl:stylesheet version="1.0"
672
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
674
exclude-result-prefixes="myns">
675
<xsl:template match="a">
676
<xsl:variable name="content">
677
<xsl:apply-templates/>
679
<A><xsl:value-of select="myns:mytext($content)"/></A>
681
<xsl:template match="b"><xsl:copy>BBB</xsl:copy></xsl:template>
682
</xsl:stylesheet>''')
684
def mytext(ctxt, values):
686
self.assert_(hasattr(value, 'tag'),
687
"%s is not an Element" % type(value))
688
self.assertEquals(value.tag, 'b')
689
self.assertEquals(value.text, 'BBB')
690
return 'X'.join([el.tag for el in values])
692
namespace = etree.FunctionNamespace('testns')
693
namespace['mytext'] = mytext
695
result = tree.xslt(style)
696
self.assertEquals(self._rootstring(result),
697
_bytes('<A>bXb</A>'))
650
699
def test_extension_element(self):
651
700
tree = self.parse('<a><b>B</b></a>')
652
701
style = self.parse('''\
862
911
self.assertEquals(root[3].get("value"),
914
def test_xslt_resolver_url_building(self):
915
assertEquals = self.assertEquals
916
called = {'count' : 0}
918
class TestResolver(etree.Resolver):
919
def resolve(self, url, id, context):
920
assertEquals(url, expected_url)
922
return self.resolve_string('<CALLED/>', context)
924
stylesheet_xml = _bytes("""\
925
<xsl:stylesheet version="1.0"
926
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
928
<xsl:template match="/">
929
<xsl:copy-of select="document('test.xml')"/>
934
parser = etree.XMLParser()
935
parser.resolvers.add(TestResolver())
937
# test without base_url => relative path only
938
expected_url = 'test.xml'
939
xslt = etree.XSLT(etree.XML(stylesheet_xml, parser))
941
self.assertEquals(called['count'], 0)
942
result = xslt(etree.XML('<a/>'))
943
self.assertEquals(called['count'], 1)
945
# now the same thing with a stylesheet base URL on the filesystem
947
expected_url = os.path.join('MY', 'BASE', 'test.xml')
948
xslt = etree.XSLT(etree.XML(stylesheet_xml, parser,
949
base_url=os.path.join('MY', 'BASE', 'FILE')))
951
self.assertEquals(called['count'], 0)
952
result = xslt(etree.XML('<a/>'))
953
self.assertEquals(called['count'], 1)
955
# now the same thing with a stylesheet base URL
957
expected_url = 'http://server.com/BASE/DIR/test.xml'
958
xslt = etree.XSLT(etree.XML(stylesheet_xml, parser,
959
base_url='http://server.com/BASE/DIR/FILE'))
961
self.assertEquals(called['count'], 0)
962
result = xslt(etree.XML('<a/>'))
963
self.assertEquals(called['count'], 1)
865
965
def test_xslt_document_parse_allow(self):
866
966
access_control = etree.XSLTAccessControl(read_file=True)
867
967
xslt = etree.XSLT(etree.parse(fileInTestDir("test-document.xslt")),