【发布时间】:2021-10-08 04:54:56
【问题描述】:
我正在尝试使用 XPath 查找所有 不 具有特定类型属性的 XML 元素。以下代码显示了 XML 结构的相关部分:
<item>
<descriptorgroup>
<descriptors type="MEA">
<descriptor>
<mainterm> polyolefin </mainterm>
</descriptor>
<descriptor>
<mainterm> water </mainterm>
</descriptor>
<\item>
我想提取描述符类型不是 MEA 或 MEB 的所有项目的主要术语(在本例中为聚烯烃,水)的值(首先,我一直在尝试检索这些在哪里type 不是 MEA。我尝试了以下代码:
terms = item.findall(".//ns0:descriptors[not(@type ='MEA')]//ns0:mainterm", prefix_map),
其中prefix_map指定了ns0对应的命名空间。
将此代码修改为terms = item.findall(".//ns0:descriptors[@type ='MEA']//ns0:mainterm", prefix_map) 成功找到满足特定条件的所有项目(例如@type = "MEA"),但在添加not 时,我得到一个“invalid predicate”错误.
我看到类似的问题,例如XPath to find elements that does not have an id or class,其中明确了not条件的语法,但似乎这个条件与item.findall不兼容?我是 lxml 和 ElementTree 的新手,不知道我可以用什么替换 findall 函数来让我的条件起作用。
【问题讨论】:
-
您是否要排除
@type属性或它们的值?另外,请添加您正在使用的 xml 的最低工作示例, -
对不起,我已经添加了信息
-
您问题中的示例 xml(非常)格式不正确,并且没有任何必要的命名空间信息。忽略命名空间问题,通过猜测正确的 xml 格式可能会给您一个 lxml 答案,但它可能不适用于您的实际 xml。
-
@Magdalena xpath() 方法让您可以使用 xpath 的全部功能。 lxml.de/xpathxslt.html#the-xpath-method
标签: xml conditional-statements lxml elementtree