<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body bgcolor="#ffffff" text="#000000">
I am stumped. Probably doing something stupid but I just cannot get
document('') to work with lxml, but it does work when the .xsl is sent
to the browser (ff) and it does work with xsltproc<br>
<br>
I think there's been a change in libxslt at some point, but I don't
know exactly what changed.<br>
<br>
This deployment works:<br>
<br>
RHEL4 linux with libxml2 2.6.27 and libxslt 1.1.18, with lxml 2 alpha4<br>
<br>
this deployment does not work:<br>
<br>
Centos 4 with libxml2 2.6.28 and libxslt 1.1.19 with lxml 2 alpha 3<br>
<br>
So I upgraded to libxml2 2.6.30, libxslt 1.1.22 and lxml 2 beta 2<br>
But it still doesn't work correctly.<br>
<br>
I am passing a base_url when creating documents using etree.fromstring<br>
<br>
I've traced the execution of document('') via gdb, both in
libxslt/functions.c and libxslt/documents.c<br>
<br>
For example, in libxslt/functions.c<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 142&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; idoc = xsltLoadDocument(tctxt, URI);<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; (gdb) print URI<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $7 = (xmlChar *) 0x90e7c00 "/carrier_payables/view.htm"<br>
<br>
the correct uri (what I passed for base_url) is shown<br>
<br>
and <br>
<br>
&nbsp;&nbsp;&nbsp; Now in documents.c line 315::<br>
&nbsp;&nbsp;&nbsp; <br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 317&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ((ret-&gt;doc != NULL) &amp;&amp;
(ret-&gt;doc-&gt;URL != NULL) &amp;&amp;<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; (gdb) print ret-&gt;doc<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $11 = 0x90d6ef8<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; (gdb) print ret-&gt;doc-&gt;URL<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $12 = (const xmlChar *) 0x90dca08 "/carrier_payables/view.htm"<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; (gdb) print URI<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $13 = (const xmlChar *) 0x90e7c00 "/carrier_payables/view.htm"<br>
&nbsp;&nbsp;&nbsp; <br>
<br>
so all seems to be correct, it is returning the expected document back
to the xpath evaluator.<br>
<br>
I'm stumped&nbsp; that it works with older versions of libxslt, works with
client-side transform, and works with xsltproc, but not through lxml
with "newer libxslt"<br>
<br>
<br>
Can anyone suggest some other steps I can use to diagnose this
problem?&nbsp; I'm sure I've done something wrong with how I am using<br>
lxml, but I can't figure it out.<br>
<br>
My .xsl looks (in part) like this. Its loaded using etree.fromstring
with a base_url:<br>
<br>
<tt>&lt;?xml version="1.0"?&gt;<br>
&lt;xsl_:stylesheet xmlns:xsl_=<a class="moz-txt-link-rfc2396E" href="http://www.w3.org/1999/XSL/Transform">"http://www.w3.org/1999/XSL/Transform"</a>
xmlns:metal=<a class="moz-txt-link-rfc2396E" href="http://xml.zope.org/namespaces/metal">"http://xml.zope.org/namespaces/metal"</a> <br>
xmlns:tal=<a class="moz-txt-link-rfc2396E" href="http://xml.zope.org/namespaces/tal">"http://xml.zope.org/namespaces/tal"</a> xmlns:const="const.uri"
version="1.0" exclude-result-prefixes="tal metal const"&gt;<br>
&nbsp; &lt;xsl_:output encoding="utf-8" method="xml"
omit-xml-declaration="no" cdata-section-elements=""
doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" <br>
doctype-system=<a class="moz-txt-link-rfc2396E" href="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"</a>/&gt;<br>
&nbsp; &lt;const:javascript id="number_pad_javascript"&gt;<br>
&nbsp;&nbsp;&nbsp; &lt;const:file&gt;MochiKit/MochiKit.js&lt;/const:file&gt;<br>
&nbsp;&nbsp;&nbsp; &lt;const:file&gt;jstal/jstal.js&lt;/const:file&gt;<br>
&nbsp;&nbsp;&nbsp; &lt;const:file&gt;global.js&lt;/const:file&gt;<br>
&nbsp;&nbsp;&nbsp; &lt;const:file&gt;view.js&lt;/const:file&gt;<br>
&nbsp; &lt;/const:javascript&gt;<br>
&nbsp; &lt;xsl_:template match="/"&gt;<br>
&nbsp;&nbsp;&nbsp; &lt;html xmlns=<a class="moz-txt-link-rfc2396E" href="http://www.w3.org/1999/xhtml">"http://www.w3.org/1999/xhtml"</a>&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;head&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;title&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; View Carrier Payables<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/title&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;link rel="stylesheet" type="text/css"
href="/css/default.css"/&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;link rel="stylesheet" media="print" type="text/css"
href="/css/print.css"/&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/head&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;body&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;div id="ajax-indicator" style="display:none"
class="no-print"&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;img title="some title" width="24" height="24"
src="/images/ajax_indicator.gif"/&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/div&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;xsl_:for-each
select="document('')//const:javascript/const:file"&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;xsl_:variable name="file" select="."/&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;script type="text/javascript"&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;xsl_:attribute name="src"&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;xsl_:value-of select="concat('/scripts/', $file)"/&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/xsl_:attribute&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/script&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/xsl_:for-each&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;div&gt;more stuff&lt;/div&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp; &lt;/body&gt;<br>
&nbsp; &lt;/html&gt;<br>
&lt;/xsl_:template&gt;<br>
</tt><tt>&lt;/xsl_:stylesheet&gt;</tt><br>
<pre class="moz-signature" cols="72"><font color="#330033">using xsltproc against a source xml file:

&lt;root /&gt;

produces this output</font>
</pre>
<br>
<tt>&lt;?xml version="1.0" encoding="utf-8"?&gt;<br>
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
<a class="moz-txt-link-rfc2396E" href="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"</a>&gt;<br>
&lt;html xmlns=<a class="moz-txt-link-rfc2396E" href="http://www.w3.org/1999/xhtml">"http://www.w3.org/1999/xhtml"</a>&gt;<br>
&nbsp; &lt;head&gt;<br>
&nbsp;&nbsp;&nbsp; &lt;meta http-equiv="Content-Type" content="text/html;
charset=utf-8" /&gt;<br>
&nbsp;&nbsp;&nbsp; &lt;title&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; View Carrier Payables<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/title&gt;<br>
&nbsp;&nbsp;&nbsp; &lt;link rel="stylesheet" type="text/css" href="/css/default.css"
/&gt;<br>
&nbsp;&nbsp;&nbsp; &lt;link rel="stylesheet" media="print" type="text/css"
href="/css/print.css" /&gt;<br>
&nbsp; &lt;/head&gt;<br>
&nbsp; &lt;body&gt;<br>
&nbsp;&nbsp;&nbsp; &lt;div id="ajax-indicator" style="display:none"
class="no-print"&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;img title="some title" width="24" height="24"
src="/images/ajax_indicator.gif" /&gt;<br>
&nbsp;&nbsp;&nbsp; &lt;/div&gt;<br>
&nbsp;&nbsp;&nbsp; &lt;script type="text/javascript"
src="/scripts/MochiKit/MochiKit.js"&gt;&lt;/script&gt;<br>
&nbsp;&nbsp;&nbsp; &lt;script type="text/javascript"
src="/scripts/jstal/jstal.js"&gt;&lt;/script&gt;<br>
&nbsp;&nbsp;&nbsp; &lt;script type="text/javascript"
src="/scripts/global.js"&gt;&lt;/script&gt;<br>
&nbsp;&nbsp;&nbsp; &lt;script type="text/javascript"
src="/scripts/view.js"&gt;&lt;/script&gt;<br>
&nbsp;&nbsp;&nbsp; &lt;div&gt;more stuff&lt;/div&gt;<br>
</tt>&nbsp;&nbsp;&nbsp;&nbsp; <br>
<br>
But with lxml, I get:<br>
<br>
<tt>&lt;?xml version="1.0" encoding="utf-8"?&gt;<br>
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
<a class="moz-txt-link-rfc2396E" href="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"</a>&gt;<br>
&lt;html xmlns=<a class="moz-txt-link-rfc2396E" href="http://www.w3.org/1999/xhtml">"http://www.w3.org/1999/xhtml"</a>&gt;<br>
&nbsp; &lt;head&gt;<br>
&nbsp;&nbsp;&nbsp; &lt;meta http-equiv="Content-Type" content="text/html;
charset=utf-8" /&gt;<br>
&nbsp;&nbsp;&nbsp; &lt;title&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; View Carrier Payables<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/title&gt;<br>
&nbsp;&nbsp;&nbsp; &lt;link rel="stylesheet" type="text/css" href="/css/default.css"
/&gt;<br>
&nbsp;&nbsp;&nbsp; &lt;link rel="stylesheet" media="print" type="text/css"
href="/css/print.css" /&gt;<br>
&nbsp; &lt;/head&gt;<br>
&nbsp; &lt;body&gt;<br>
&nbsp;&nbsp;&nbsp; &lt;div id="ajax-indicator" style="display:none"
class="no-print"&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;img title="some title" width="24" height="24"
src="/images/ajax_indicator.gif" /&gt;<br>
&nbsp;&nbsp;&nbsp; &lt;/div&gt;<br>
&nbsp;&nbsp;&nbsp; &lt;div&gt;more stuff&lt;/div&gt;<br>
</tt><br>
<br>
I am using a custom resolver. The resolver is not asked to resolve the
.xsl stylesheet, nor is it asked to resolve ''<br>
<br>
p-code is like this:<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; parser = etree.XMLParser(load_dtd=True)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; parser.resolvers.add(Resolver(resolver=my_resolver))<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; stylesheet_doc = etree.fromstring(xslt_src, parser,
base_url=xsl_uri)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; stylesheet = etree.XSLT(stylesheet_doc)<br>
<br>
likewise the source xml is loaded in the same way<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; parser = etree.XMLParser(load_dtd=True)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
parser.resolvers.add(Resolver(resolver=my_resolver))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xml_doc = etree.fromstring(xml_src, parser,
base_url=xml_uri)<br>
<br>
finally <br>
<br>
return stylesheet(xml_doc, **params)<br>
<br>
<br>
-- <br>
Brad Clements, <a class="moz-txt-link-abbreviated" href="mailto:bkc@murkworks.com">bkc@murkworks.com</a> (315)268-1000<br>
<a class="moz-txt-link-freetext" href="http://www.murkworks.com">http://www.murkworks.com</a> <br>
AOL-IM: BKClements
</body>
</html>