最近的项目开发中常常要分析XML,深切体会到XPath的强大和方便。Java可以使用DOM4j,Python 2.5以后可以使用了etree。
举个小例子,如果有如下XML:
1 2 3 4 5 6 7 8 |
<A> <C> <B>1</B> </C> <D> <B>2</B> </D> </A> |
要去掉所有<B>的节点,XPath可以如何做呢?
1 2 3 4 5 6 7 8 |
import xml.etree.ELementTree as ET root = ET.fromstring(xml_str) b_parent_nodes = root.findall(".//B/..") # find parent nodes of all <B> nodes for i in range(len(b_parent_nodes)): node = b_parent_nodes[i].findall("./B")[0] # find all <B> nodes under current tag b_parent_nodes[i].remove(node) |
XPath的灵活之处就在于,可以用简单明了的Path控制想要读取的节点。
其实还有很多有趣的特性,可以看看XPath Tutorial。