python从xml中提取项目
我想用python读取一个xml文件,它如下所示:python从xml中提取项目,python,xml,Python,Xml,我想用python读取一个xml文件,它如下所示: <xml> <project name = "proj1"> <design name = "des1"> <param>para1</param> </design> <design name = "des2"> <param>para4<
<xml>
<project name = "proj1">
<design name = "des1">
<param>para1</param>
</design>
<design name = "des2">
<param>para4</param>
</design>
</project>
<project name = "proj2">
<design name = "des2">
<param>para2</param>
</design>
</project><project name = "proj3">
<design name = "des3">
<param>para3</param>
</design>
</project>
</xml>
但是我如何获得一个特定的项目,比如proj1中的des2中的param?阅读etree
,以获得一个列表(带有示例),其中列出了遍历DOM和检索数据所能做的一切。如果您不熟悉它,您可能还想了解它(即使使用此模块,您也可以使用它的子集轻松检索某些元素)。对于您的具体示例,它将是:
root.find('project[@name="proj1"]/design[@name="des2"]/param').text
param = root.xpath(/project[@name="proj1"]/design[@name="des2"]/param/Text()')
就我个人而言,我会使用lxml,而不是原生pythonetree代码。通过这种方式,您可以使用XPath,这使得操作xml更加容易 例如,获取您请求的元素的代码是:
root.find('project[@name="proj1"]/design[@name="des2"]/param').text
param = root.xpath(/project[@name="proj1"]/design[@name="des2"]/param/Text()')
更新:看起来ETree支持完整XPath的一个子集,所以它可以满足@mgibsonbr有趣的指出的需求,但如果我有多个参数呢?我可以使用root.findall('project[@name=“proj1”]/design[@name=“des2”]/param')并遍历它吗?@Yui当然可以!这将返回一个元素列表,因此您可以像在
中为root中的child所做的那样使用它们。