Skip to content

Commit

Permalink
Added basic iterwrite support
Browse files Browse the repository at this point in the history
  • Loading branch information
filipsalo committed Apr 11, 2010
1 parent 89dafc4 commit a2d245f
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 0 deletions.
25 changes: 25 additions & 0 deletions streamxmlwriter.py
Original file line number Diff line number Diff line change
Expand Up @@ -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()

19 changes: 19 additions & 0 deletions test/test_streamxmlwriter.py
Original file line number Diff line number Diff line change
Expand Up @@ -280,6 +280,25 @@ def testAttributesSameLocalOnePrefixedOneDefault(self):
'</foo>')


class IterwriteTestCase(unittest.TestCase):
def testBasic(self):
from lxml import etree
from cStringIO import StringIO
w, out = writer_and_output()
xml = """\
<!--comment before--><?pi before?><foo xmlns="http://example.org/ns1">
<?a pi?>
<bar xmlns:b="http://example.org/ns2">
<?pi inside?>some text
<baz attr="1" b:attr="2" />
oh dear<!--comment inside -->text here too
</bar>
</foo><?pi after?><!--comment after-->"""
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")
Expand Down

0 comments on commit a2d245f

Please sign in to comment.