lxml and xslt extensions

Stefan Behnel stefan_ml at behnel.de
Sat Apr 4 20:55:07 CEST 2009


dasacc22 wrote:
> On Apr 4, 11:31 am, dasacc22 wrote:
>> Im not sure where else to ask this.

The best place to ask is the lxml mailing list:


>> But basically Im having trouble
>> figuring out how to successfully apply multiple extensions in a single
>> transformation. So for example if i have
>> <xsl:stylesheet .../>
>> <xsl:template...>
>> <my:tag/>
>> <my:tag/>
>> </xsl:template>
>> </xsl:stylesheet>
>> in my xsl and my xslt extension looks like
>> class TagExtension(etree.XSLTExtension):
>>   def execute( ..., output_parent):
>>     print 'executing tag_extension'
>>     tag = etree.Element('p')
>>     tag.text = 'Hello'
>>     output_parent.append(tag)
>> well then the transformation works for the first tag and appends it to
>> the root of the created doc but all subsequent calls dont append
>> (maybe b/c output_parent is now somewhere else for return?). And to
>> clarify, I know that its the first call that completes and all
>> subsequent calls fail b/c i have a subsequent call that performs a
>> different transformation.
> Oh well I found the culprit, etree.tostring seems to cut it off after
> the first transformation,

Not sure what you mean here. Could you post your question on the lxml
mailing list and add a runnable example that shows the behaviour?

> simply doing a
> $> print result
> displays the entire document. To make use of the keyword options
> xml_declaration, pretty_print, encoding, I tried using the .write
> method of result to a StringIO but it produces the same clipped
> result. Guess Ill have to edit the .docinfo attributes on the result
> and return the string

.docinfo is basically read-only. The result of the XSLT is serialised as
requested by the xsl:output element in the stylesheet.


More information about the Python-list mailing list