mirror of
https://github.com/python/cpython.git
synced 2026-06-04 16:50:51 +00:00
gh-149571: Fix the C implementation of Element.itertext() (GH-149929)
It no longer emits text for comments and processing instructions.
This commit is contained in:
parent
776573c9f0
commit
7de4fcd445
3 changed files with 32 additions and 0 deletions
|
|
@ -3663,6 +3663,32 @@ def test_basic(self):
|
|||
doc = ET.XML("<root>a&<sub>b&</sub>c&</root>")
|
||||
self.assertEqual(''.join(doc.itertext()), 'a&b&c&')
|
||||
|
||||
def test_comment(self):
|
||||
e = ET.Element('root')
|
||||
e.text = 'before'
|
||||
comment = ET.Comment('comment')
|
||||
self.assertEqual(comment.text, 'comment')
|
||||
comment.tail = 'after'
|
||||
e.append(comment)
|
||||
self.assertEqual(''.join(e.itertext()), 'beforeafter')
|
||||
self.assertEqual(list(e.iter()), [e, comment])
|
||||
self.assertEqual(list(e.iter('root')), [e])
|
||||
self.assertEqual(''.join(comment.itertext()), '')
|
||||
self.assertEqual(list(comment.iter()), [comment])
|
||||
|
||||
def test_processinginstruction(self):
|
||||
e = ET.Element('root')
|
||||
e.text = 'before'
|
||||
pi = ET.PI('test', 'instruction')
|
||||
self.assertEqual(pi.text, 'test instruction')
|
||||
pi.tail = 'after'
|
||||
e.append(pi)
|
||||
self.assertEqual(''.join(e.itertext()), 'beforeafter')
|
||||
self.assertEqual(list(e.iter()), [e, pi])
|
||||
self.assertEqual(list(e.iter('root')), [e])
|
||||
self.assertEqual(''.join(pi.itertext()), '')
|
||||
self.assertEqual(list(pi.iter()), [pi])
|
||||
|
||||
def test_corners(self):
|
||||
# single root, no subelements
|
||||
a = ET.Element('a')
|
||||
|
|
|
|||
|
|
@ -0,0 +1,2 @@
|
|||
Fix the C implementation of :meth:`xml.etree.ElementTree.Element.itertext`:
|
||||
it no longer emits text for comments and processing instructions.
|
||||
|
|
@ -2297,6 +2297,10 @@ elementiter_next(PyObject *op)
|
|||
return NULL;
|
||||
}
|
||||
if (it->gettext) {
|
||||
if (elem->tag != Py_None && !PyUnicode_Check(elem->tag)) {
|
||||
Py_DECREF(elem);
|
||||
continue;
|
||||
}
|
||||
text = element_get_text(elem);
|
||||
goto gettext;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue