[lxml-dev] Pure Text Elements as XSLT results impossible?
XSLT transforms that should result in a TEXT only Element silently result in some kind of 'None' result class with the text seemingly lost. Propably caused by Text Elements beeing second class in ElementTree. This seems to be very wrong or am I. Regards Hans from lxml import etree xsl = """<?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="text" /> <xsl:template match="/"> TestText </xsl:template> </xsl:stylesheet>""" trans = etree.XSLT(etree.XML(xsl)) str(etree.tostring(trans(etree.XML('<test/>')))) --->> 'None' insted of 'TestText' ---------------------------------------------------------------------- from lxml import etree xsl = """<?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <dummy/> TestText </xsl:template> </xsl:stylesheet>""" trans = etree.XSLT(etree.XML(xsl)) etree.tostring(trans(etree.XML('<test/>'))) -->> '<dummy/> TestText' (works) ---------------------------------------------------------------------- from lxml import etree xsl = """<?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> TestText <dummy/> </xsl:template> </xsl:stylesheet>""" trans = etree.XSLT(etree.XML(xsl)) etree.tostring(trans(etree.XML('<test/>'))) --->> '<dummy/>' ('TestText' in front missing)
Hi Hans-Jürgen, Hans-Jürgen Hay wrote:
XSLT transforms that should result in a TEXT only Element silently result in some kind of 'None' result class with the text seemingly lost. Propably caused by Text Elements beeing second class in ElementTree.
from lxml import etree xsl = """<?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="text" /> <xsl:template match="/"> TestText </xsl:template> </xsl:stylesheet>""" trans = etree.XSLT(etree.XML(xsl)) str(etree.tostring(trans(etree.XML('<test/>'))))
--->> 'None' insted of 'TestText' ---------------------------------------------------------------------- from lxml import etree xsl = """<?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <dummy/> TestText </xsl:template> </xsl:stylesheet>""" trans = etree.XSLT(etree.XML(xsl)) etree.tostring(trans(etree.XML('<test/>')))
-->> '<dummy/> TestText' (works) ---------------------------------------------------------------------- from lxml import etree xsl = """<?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> TestText <dummy/> </xsl:template> </xsl:stylesheet>""" trans = etree.XSLT(etree.XML(xsl)) etree.tostring(trans(etree.XML('<test/>')))
--->> '<dummy/>' ('TestText' in front missing)
looks like you forgot to test str(trans(...)) which is the usage suggested by the documentation. Stefan
participants (2)
-
Hans-Jürgen Hay -
Stefan Behnel