From a2d245f342f6432927aee38b4e3ed5318a4e4774 Mon Sep 17 00:00:00 2001 From: Filip Salomonsson Date: Sun, 11 Apr 2010 02:17:28 +0200 Subject: [PATCH] Added basic iterwrite support --- streamxmlwriter.py | 25 +++++++++++++++++++++++++ test/test_streamxmlwriter.py | 19 +++++++++++++++++++ 2 files changed, 44 insertions(+) diff --git a/streamxmlwriter.py b/streamxmlwriter.py index 624cd2c..3544757 100644 --- a/streamxmlwriter.py +++ b/streamxmlwriter.py @@ -355,3 +355,28 @@ def close(self): """Close all open elements.""" while self._tags: self.end() + + def iterwrite(self, events): + for event, elem in events: + if event == "start-ns": + self.start_ns(*elem) + elif event == "end-ns": + self.end_ns() + elif event == "comment": + self.comment(elem.text) + if elem.tail: + self.data(elem.tail) + elif event == "pi": + self.pi(elem.target, elem.text) + if elem.tail: + self.data(elem.tail) + elif event == "start": + self.start(elem.tag, dict(elem.attrib)) + if elem.text: + self.data(elem.text) + elif event == "end": + self.end(elem.tag) + if elem.tail: + self.data(elem.tail) + elem.clear() + diff --git a/test/test_streamxmlwriter.py b/test/test_streamxmlwriter.py index 4f2be9b..adf09c5 100644 --- a/test/test_streamxmlwriter.py +++ b/test/test_streamxmlwriter.py @@ -280,6 +280,25 @@ def testAttributesSameLocalOnePrefixedOneDefault(self): '') +class IterwriteTestCase(unittest.TestCase): + def testBasic(self): + from lxml import etree + from cStringIO import StringIO + w, out = writer_and_output() + xml = """\ + + + + some text + + oh deartext here too + +""" + events = ("start", "end", "start-ns", "end-ns", "pi", "comment") + w.iterwrite(etree.iterparse(StringIO(xml), events)) + w.close() + self.assertEqual(out.getvalue(), xml) + # from lxml import etree # # rmt = etree.parse("test/xmlconf/eduni/namespaces/1.0/rmt-ns10.xml")