在Python中使用Xpath按属性选择祖先节点

时间:2016-01-07 10:59:34

标签: python xml xpath

我的XML在概念上就是这种结构:

<?xml version="1.0" encoding="UTF-8"?>
<Employees>
 <Employee>
    <age>40</age>
    <name lang="en">Tom</name>
    <gender>Male</gender>
    <role>Manager</role>
 </Employee>
 <Employee>
    <age>25</age>
    <name lang="fr">Meghna</name>
    <gender>Female</gender>
    <role>Manager</role>
 </Employee>
</Employees> 

现在,我想要的是选择所有名称为lang =“en”的员工,并将其写入新的XML文件。

所以在这个例子中我只想要第一个雇员:

<Employee>
    <age>40</age>
    <name lang="en">Tom</name>
    <gender>Male</gender>
    <role>Manager</role>
</Employee>

我试着做那样的事情

//Employee[//name[@lang='en']]

(我故意在名字之前使用//,因为名字不一定是员工的直接子女)

我不知道如何将其写入文件,并且出于某种原因 - 我的查询不会返回任何内容。

1 个答案:

答案 0 :(得分:2)

根据发布的XML,您应该能够使用以下XPath表达式:

//Employee[name/@lang='en']

XPath返回Employee元素,其中相应的子name具有属性lang等于"en"。或者,如果name可能不是Employee的直接子项,则可以改为使用以下表达式:

//Employee[.//name/@lang='en']

请注意.之前的//,表示谓词([])中的表达式与当前Employee上下文相关。