word/_rels/document.xml.rels
文件中的.docx
有一个空的preifx命名空间元素:<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
会导致我无法使用findall
mehtod获取儿童节点。
简化示例:
>>> from lxml import etree
>>> etree.fromstring(b'<x><y id="1"/><y id="2"/></x>').findall('y')
[<Element y at 0x382d788>, <Element y at 0x382db48>]
>>> etree.fromstring(b'<x xmlns="wow"><y id="1"/><y id="2"/></x>').findall('y')
[]
# How to find these children nodes like previous one?
答案 0 :(得分:1)
如果您使用lxml
的{{1}}方法,则应与using the built-in xml.etree.ElementTree
相同,再加上另一个选项:
xpath()
请注意,没有前缀的后代元素会隐式地继承祖先的默认命名空间 ,这就是为什么在选择>>> from lxml import etree
>>> root = etree.fromstring(b'<x xmlns="wow"><y id="1"/><y id="2"/></x>')
>>> root.findall('{wow}y')
[<Element {wow}y at 0x2b489c8>, <Element {wow}y at 0x2b48588>]
>>> ns = {'d': 'wow'}
>>> root.findall('d:y', ns)
[<Element {wow}y at 0x2b489c8>, <Element {wow}y at 0x2b48588>]
>>> root.xpath('d:y', namespaces=ns)
[<Element {wow}y at 0x2b489c8>, <Element {wow}y at 0x2b48588>]
时需要考虑命名空间,尽管在父元素{{1}处声明了命名空间}。