XPath逻辑条件和findall函数



我试图找到所有使用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后,我得到一个"无效谓词"误差.

我看到了类似的问题,比如用XPath查找没有id或类的元素,其中澄清了not条件的语法,但似乎这个条件与item.findall不兼容?我是lxml和ElementTree的新手,不确定我可以用findall函数代替我的条件来工作。

如上所述,findall()不使用真正的xpath。从教程:

ElementTree库附带了一个简单的类似xpath的路径语言叫ElementPath……然而,先进的如值比较和函数等功能不可用。

要使用像not()这样的XPath函数,请尝试terms = item.xpath(".//ns0:descriptors[not(@type ='MEA')]//ns0:mainterm", prefix_map)

最新更新