def test_transform_fromstring(self): xslt_src = u""" <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:pyext="http://www.opikanoba.org/ns/etree-extensions" exclude-result-prefixes="pyext" extension-element-prefixes="pyext" version="1.0"> <xsl:template match="/test"> <pubDate> <xsl:apply-templates select="isodate" mode="RFC822"/> </pubDate> </xsl:template> <xsl:template match="isodate" mode="RFC822"> <pyext:formatdt></pyext:formatdt> </xsl:template> </xsl:stylesheet> """ xml_src = u"""<?xml version="1.0" ?><test><isodate>2017-11-03T16:55:03.198512+00:00</isodate></test>""" expected_result = u"""<?xml version="1.0" ?><pubDate>Fri, 03 Nov 2017 16:55:03 +0000</pubDate>""" # Process proc = xslt_ext.DateFormatterProcessor(etree.fromstring(xslt_src)) result_xml = proc.transform(etree.fromstring(xml_src)) # Check result xml2 = etree.fromstring(expected_result) self.assertEqual(etree.tostring(result_xml), etree.tostring(xml2))
def main(): parser = argparse.ArgumentParser() parser.add_argument("--atom", help="Atom filename (input)") parser.add_argument("--rss2", help="RSS2 filename (output)") parser.add_argument( "--xslt", help="XSLT stylesheet (optionnal), default = {}".format( DEFAULT_XSLT_FILE), default=DEFAULT_XSLT_FILE) args = parser.parse_args() filedir = os.path.dirname(os.path.abspath(__file__)) xslt_filename = os.path.join(filedir, args.xslt) print("XSLT : {}".format(xslt_filename)) proc = xslt_ext.DateFormatterProcessor() proc.load_xslt(xslt_filename) if args.atom is not None and os.path.exists(args.atom): result_xml = proc.transform(etree.parse(args.atom)) data = etree.tostring(result_xml, encoding=ENCODING, xml_declaration=True, pretty_print=True) if args.rss2 is not None: with codecs.open(args.rss2, "w", ENCODING) as fout: fout.write(data.decode(ENCODING)) else: print(data)
def test_transform_none(self): filedir = os.path.dirname(os.path.abspath(__file__)) xml1_fn = os.path.join(filedir, 'simple_instance.xml') # Process proc = xslt_ext.DateFormatterProcessor() result_xml = proc.transform(etree.parse(xml1_fn)) # Check result self.assertIsNone(result_xml)
def test_transform_fromfile(self): filedir = os.path.dirname(os.path.abspath(__file__)) xml1_fn = os.path.join(filedir, 'simple_instance.xml') # Process xslt = etree.parse(os.path.join(filedir, 'simple_ext.xsl')) proc = xslt_ext.DateFormatterProcessor(xslt) result_xml = proc.transform(etree.parse(xml1_fn)) # Check result expected_result = u"""<?xml version="1.0" ?><pubDate>Fri, 03 Nov 2017 16:55:03 +0000</pubDate>""" xml2 = etree.fromstring(expected_result) self.assertEqual(etree.tostring(result_xml), etree.tostring(xml2))
def test_transform_atom_include_sample(self): filedir = os.path.dirname(os.path.abspath(__file__)) xml1_fn = os.path.join(filedir, 'atom_instance.xml') # Process xslt_filename = os.path.abspath(os.path.join(filedir, '../atom1_to_rss2_pyext.xsl')) proc = xslt_ext.DateFormatterProcessor() proc.load_xslt(xslt_filename) result_xml = proc.transform(etree.parse(xml1_fn)) # check xmlexpected_fn = os.path.join(filedir, 'rss2_from_xslt1_expected.xml') xml2 = etree.parse(xmlexpected_fn) self.assertEqual(etree.tostring(result_xml, encoding='UTF-8', pretty_print=True, xml_declaration=True), etree.tostring(xml2, encoding='UTF-8', pretty_print=True, xml_declaration=True))
def test_transform_atom_include_resolver(self): filedir = os.path.dirname(os.path.abspath(__file__)) filedirxsl = os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__)), '..')) xml1_fn = os.path.join(filedir, 'atom_instance.xml') # Process _parser = etree.XMLParser() _parser.resolvers.add(PrefixResolver(filedirxsl)) xslt = etree.parse(os.path.join(filedirxsl, 'atom1_to_rss2_pyext.xsl'), _parser) proc = xslt_ext.DateFormatterProcessor(xslt) result_xml = proc.transform(etree.parse(xml1_fn)) # check xmlexpected_fn = os.path.join(filedir, 'rss2_from_xslt1_expected.xml') xml2 = etree.parse(xmlexpected_fn) self.assertEqual(etree.tostring(result_xml, encoding='UTF-8', pretty_print=True, xml_declaration=True), etree.tostring(xml2, encoding='UTF-8', pretty_print=True, xml_declaration=True))
def test_transform_fromfile_ns(self): filedir = os.path.dirname(os.path.abspath(__file__)) xml1_fn = os.path.join(filedir, 'simple_instance2.xml') # Process _parser = etree.XMLParser() _parser.resolvers.add(PrefixResolver(filedir)) xslt = etree.parse(os.path.join(filedir, 'simple_ext_3.xsl'), _parser) proc = xslt_ext.DateFormatterProcessor(xslt) result_xml = proc.transform(etree.parse(xml1_fn)) print( etree.tostring(result_xml, pretty_print=True, xml_declaration=True)) # Check result expected_result = u"""<?xml version="1.0" ?><pubDate>Fri, 03 Nov 2017 16:55:03 +0000</pubDate>""" xml2 = etree.fromstring(expected_result) self.assertEqual(etree.tostring(result_xml), etree.tostring(xml2))