diff options
| author | xmo-odoo <xmo@odoo.com> | 2020-03-03 13:38:32 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-03-03 13:38:32 +0100 |
| commit | eabf1db31c3a78602c8ece7a3b19e82a99e12ebb (patch) | |
| tree | 70511a452afb0d104d1849607928bbda3d995bfd /src | |
| parent | 5a143cca4dfc160a01415acb6a2304ede41a95ca (diff) | |
| download | python-lxml-eabf1db31c3a78602c8ece7a3b19e82a99e12ebb.tar.gz | |
Make iter() work with qnames (GH-298)
"QName" is supposed to be usable anywhere a tag name is expected and
iter() should take any number of tag names for filtering, but before
this change passing a QName to iter() results in an exception.
Diffstat (limited to 'src')
| -rw-r--r-- | src/lxml/etree.pyx | 2 | ||||
| -rw-r--r-- | src/lxml/tests/test_etree.py | 24 |
2 files changed, 26 insertions, 0 deletions
diff --git a/src/lxml/etree.pyx b/src/lxml/etree.pyx index c4d1d9db..b4467548 100644 --- a/src/lxml/etree.pyx +++ b/src/lxml/etree.pyx @@ -2741,6 +2741,8 @@ cdef class _MultiTagMatcher: elif href == b'*': href = None # wildcard: any namespace, including none self._py_tags.append((href, name)) + elif isinstance(tag, QName): + self._storeTags(tag.text, seen) else: # support a sequence of tags for item in tag: diff --git a/src/lxml/tests/test_etree.py b/src/lxml/tests/test_etree.py index b997e4d8..3d8dee1c 100644 --- a/src/lxml/tests/test_etree.py +++ b/src/lxml/tests/test_etree.py @@ -3266,6 +3266,30 @@ class ETreeOnlyTestCase(HelperTestCase): self.assertRaises(ValueError, tree.getelementpath, d1) self.assertRaises(ValueError, tree.getelementpath, d2) + def test_elementtree_iter_qname(self): + XML = self.etree.XML + ElementTree = self.etree.ElementTree + QName = self.etree.QName + tree = ElementTree(XML( + _bytes('<a xmlns:x="X" xmlns:y="Y"><x:b><c/></x:b><b/><c><x:b/><b/></c><b/></a>'))) + self.assertEqual( + list(tree.iter(QName("b"))), + list(tree.iter("b")), + ) + self.assertEqual( + list(tree.iter(QName("X", "b"))), + list(tree.iter("{X}b")), + ) + + self.assertEqual( + [e.tag for e in tree.iter(QName("X", "b"), QName("b"))], + ['{X}b', 'b', '{X}b', 'b', 'b'] + ) + self.assertEqual( + list(tree.iter(QName("X", "b"), QName("b"))), + list(tree.iter("{X}b", "b")) + ) + def test_elementtree_find_qname(self): XML = self.etree.XML ElementTree = self.etree.ElementTree |
