Issue #23729: Improve docs for ElementTree namespace parsing
This commit is contained in:
parent
e7f5e147cd
commit
c43a666ba2
|
@ -290,8 +290,8 @@ Parsing XML with Namespaces
|
||||||
If the XML input has `namespaces
|
If the XML input has `namespaces
|
||||||
<https://en.wikipedia.org/wiki/XML_namespace>`__, tags and attributes
|
<https://en.wikipedia.org/wiki/XML_namespace>`__, tags and attributes
|
||||||
with prefixes in the form ``prefix:sometag`` get expanded to
|
with prefixes in the form ``prefix:sometag`` get expanded to
|
||||||
``{uri}tag`` where the *prefix* is replaced by the full *URI*. Also,
|
``{uri}sometag`` where the *prefix* is replaced by the full *URI*.
|
||||||
if there is a `default namespace
|
Also, if there is a `default namespace
|
||||||
<http://www.w3.org/TR/2006/REC-xml-names-20060816/#defaulting>`__,
|
<http://www.w3.org/TR/2006/REC-xml-names-20060816/#defaulting>`__,
|
||||||
that full URI gets prepended to all of the non-prefixed tags.
|
that full URI gets prepended to all of the non-prefixed tags.
|
||||||
|
|
||||||
|
@ -317,17 +317,18 @@ prefix "fictional" and the other serving as the default namespace:
|
||||||
</actors>
|
</actors>
|
||||||
|
|
||||||
One way to search and explore this XML example is to manually add the
|
One way to search and explore this XML example is to manually add the
|
||||||
URI to every tag or attribute in the xpath of a *find()* or *findall()*::
|
URI to every tag or attribute in the xpath of a
|
||||||
|
:meth:`~Element.find` or :meth:`~Element.findall`::
|
||||||
|
|
||||||
root = from_string(xml_text)
|
root = fromstring(xml_text)
|
||||||
for actor in root.findall('{http://people.example.com}actor'):
|
for actor in root.findall('{http://people.example.com}actor'):
|
||||||
name = actor.find('{http://people.example.com}name')
|
name = actor.find('{http://people.example.com}name')
|
||||||
print(name.text)
|
print(name.text)
|
||||||
for char in actor.findall('{http://characters.example.com}character'):
|
for char in actor.findall('{http://characters.example.com}character'):
|
||||||
print(' |-->', char.text)
|
print(' |-->', char.text)
|
||||||
|
|
||||||
Another way to search the namespaced XML example is to create a
|
A better way to search the namespaced XML example is to create a
|
||||||
dictionary with your own prefixes and use those in the search::
|
dictionary with your own prefixes and use those in the search functions::
|
||||||
|
|
||||||
ns = {'real_person': 'http://people.example.com',
|
ns = {'real_person': 'http://people.example.com',
|
||||||
'role': 'http://characters.example.com'}
|
'role': 'http://characters.example.com'}
|
||||||
|
@ -431,8 +432,9 @@ Supported XPath syntax
|
||||||
| ``[tag]`` | Selects all elements that have a child named |
|
| ``[tag]`` | Selects all elements that have a child named |
|
||||||
| | ``tag``. Only immediate children are supported. |
|
| | ``tag``. Only immediate children are supported. |
|
||||||
+-----------------------+------------------------------------------------------+
|
+-----------------------+------------------------------------------------------+
|
||||||
| ``[tag=text]`` | Selects all elements that have a child named |
|
| ``[tag='text']`` | Selects all elements that have a child named |
|
||||||
| | ``tag`` that includes the given ``text``. |
|
| | ``tag`` whose complete text content, including |
|
||||||
|
| | descendants, equals the given ``text``. |
|
||||||
+-----------------------+------------------------------------------------------+
|
+-----------------------+------------------------------------------------------+
|
||||||
| ``[position]`` | Selects all elements that are located at the given |
|
| ``[position]`` | Selects all elements that are located at the given |
|
||||||
| | position. The position can be either an integer |
|
| | position. The position can be either an integer |
|
||||||
|
|
Loading…
Reference in New Issue