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

标签 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']]

(我故意在 name 之前使用//,因为 name 不必是 Employee 的直接子代)

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

最佳答案

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

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

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

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

请注意 // 之前的 .,它表示谓词 ([]) 内的表达式是相对于当前 Employee 的 上下文。

关于python - 在Python中使用Xpath按属性选择祖先节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34653427/

相关文章:

java - 用于访问特定选项卡内容(如果存在)的通用 xpath

python - 如何将 lxml xpath 函数导入默认命名空间?

python - 使用 matplotlib 绘图不提供所需的日期时间格式

python - 通过 Argmax 沿另一个数组的轴屏蔽一个 2D Numpy 数组

c# - XPathNavigator 是否需要 MoveToParent()/MoveToFirstChild() 对?

java - 在 Selenium Web 驱动程序中使用 Parent::* 轴时出现问题

python - 合并 pandas 中的 2 个数据框

python - 如何遍历我的目录以附加具有 NaN 值的文件?

java - 简单的 : Element 'link' is already used

xml - 如何使用 Powershell 访问 CDATA 内的 XML 数据