0001"""
0002Parses XML and HTML to `lxml <http://codespeak.net/lxml/>`_ nodes
0003"""
0004
0005from lxml import etree
0006from httpencode.format import Format
0007
0008def load_xml(fp, content_type):
0009 return etree.parse(fp)
0010
0011def dump_xml_iter(data, content_type):
0012 return [etree.tostring(data)]
0013
0014xml = Format(
0015 'lxml_xml', ['text/xml', 'application/xml'],
0016 type='lxml.etree',
0017 load=load_xml,
0018 dump_iter=dump_xml_iter,
0019 secure=True)
0020
0021def load_html(fp, content_type):
0022 return etree.parse(fp, etree.HTMLParser())
0023
0024def dump_html_iter(data, content_type):
0025 return [html_transform(data)]
0026
0027html_xsl = '''
0028<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
0029 <xsl:output method="html" encoding="UTF-8" />
0030 <xsl:template match="/">
0031 <xsl:copy-of select="."/>
0032 </xsl:template>
0033</xsl:transform>
0034'''
0035
0036html_transform = etree.XSLT(etree.XML(html_xsl))
0037
0038
0039html = Format(
0040 'lxml_html', ['text/html'],
0041 type='lxml.etree',
0042 load=load_html,
0043 dump_iter=dump_html_iter,
0044 secure=True)