yoo*_*poo 8 python xml elementtree
我正在使用一个巨大的xml文件,并尝试从不同的元素中提取信息.
import xml.etree.ElementTree as ET
tree = ET.parse('t.xml')
root = tree.getroot()
Run Code Online (Sandbox Code Playgroud)
要查找元素,我使用find方法:
elm = root.find('.//Element[@elmid="1234"]')
Run Code Online (Sandbox Code Playgroud)
从这里我提取信息,此外我需要来自父元素的信息.但elm.find('..')仅返回None此处记录的内容:https:
//docs.python.org/3/library/xml.etree.elementtree.html
现在我使用下面的内容:
prt = root.find('.//Element[@elmid="1234"]/..')
elm = prt.find('/Element[@elmid="1234"]')
Run Code Online (Sandbox Code Playgroud)
这看起来有点不自然,但有效.
你知道更好的方法吗?你知道为什么只None返回吗?
Luk*_*raf 15
该xml.etreeAPI仅支持XPath的有限版本.该xml.etree文档的..XPath表达式状态:
选择父元素.如果路径尝试到达start元素的祖先(调用元素find),则返回None.
API 不支持xml.etree直接获取父元素.因此我建议使用lxml,您只需使用它getparent()来获取父元素:
elm = root.find('.//Element[@elmid="1234"]')
elm.getparent()
Run Code Online (Sandbox Code Playgroud)
lxml也有一个完整的XPath 1.0实现,所以elem.xpath('..')也可以工作.