XPath逻辑条件和findall函数
XPath logical condition and findall function
我正在尝试使用 XPath 查找所有 不 具有特定类型属性的 XML 元素。以下代码显示了 XML 结构的相关部分:
<item>
<descriptorgroup>
<descriptors type="MEA">
<descriptor>
<mainterm> polyolefin </mainterm>
</descriptor>
<descriptor>
<mainterm> water </mainterm>
</descriptor>
<\item>
我想提取所有项目的主要术语(在本例中为聚烯烃、水)的值,其中描述符类型不是 MEA 或 MEB(首先,我一直试图检索这些类型不是 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谓词”错误.
我看到了类似的问题,比如XPath to find elements that does not have an id or class,其中阐明了not条件的语法,但是这个条件似乎与item.findall不兼容?我是 lxml 和 ElementTree 的新手,不确定我可以用什么替代 findall 函数来使我的条件起作用。
如上所述,findall()
不使用真正的 XPath。来自 tutorial:
The ElementTree library comes with a simple XPath-like path language
called ElementPath... However, advanced
features like value comparison and functions are not available.
要使用像 not()
这样的 XPath 函数,请尝试 terms = item.xpath(".//ns0:descriptors[not(@type ='MEA')]//ns0:mainterm", prefix_map)
我正在尝试使用 XPath 查找所有 不 具有特定类型属性的 XML 元素。以下代码显示了 XML 结构的相关部分:
<item>
<descriptorgroup>
<descriptors type="MEA">
<descriptor>
<mainterm> polyolefin </mainterm>
</descriptor>
<descriptor>
<mainterm> water </mainterm>
</descriptor>
<\item>
我想提取所有项目的主要术语(在本例中为聚烯烃、水)的值,其中描述符类型不是 MEA 或 MEB(首先,我一直试图检索这些类型不是 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谓词”错误.
我看到了类似的问题,比如XPath to find elements that does not have an id or class,其中阐明了not条件的语法,但是这个条件似乎与item.findall不兼容?我是 lxml 和 ElementTree 的新手,不确定我可以用什么替代 findall 函数来使我的条件起作用。
如上所述,findall()
不使用真正的 XPath。来自 tutorial:
The ElementTree library comes with a simple XPath-like path language called ElementPath... However, advanced features like value comparison and functions are not available.
要使用像 not()
这样的 XPath 函数,请尝试 terms = item.xpath(".//ns0:descriptors[not(@type ='MEA')]//ns0:mainterm", prefix_map)