在使用lxml的Python脚本中,我使用下面的Xpath来查找具有特定文本内容但特定属性没有特定值的元素,如下所示:
xpath('//el[text()="something" or text()="something else" or text()="this other thing" and @attrib!="A"]')
我也试过:
xpath('//el[text()="something" or text()="something else" or text()="this other thing" and not(@attrib="A")]')
这是循环的一部分,如下所示:
for element in root.xpath('//el[text()="something" or text()="something else" or text()="this other thing" and not(@attrib="A")]'):
element.get('attrib')
在结果中我得到了很多"A"值。我不知道我做错了什么。这是不应该发生的。
=========加法=========
for el in root_element.xpath('//tok[text()="altra" or text()="altres" or text()="altr" and not(@lemma="altre")]'):
wrong_lemma = el.get('lemma')
这是一个文档的一部分的例子,它包含了不应该匹配的元素,但是它是匹配的。我得到了'altre'作为输出中变量'wrong_lemma'的值。
<tok id="w-1264" ord="5" lemma="altre" xpos="DI0CP0">altres</tok> <tok id="w-1265" ord="6" lemma="insigne" xpos="AQ0CP00">insignes</tok> <tok id="w-1266" ord="7" lemma="cavaller" xpos="NCMP000">cavallers</tok>
以下选项也不起作用:
for el in root_element.xpath('//tok[text()="altra" or text()="altres" or text()="altr" and @lemma!="altre"]'):
wrong_lemma = el.get('lemma')
for el in root_element.xpath('//tok[text()="altra" or text()="altres" or text()="altr" and not(contains(@lemma!="altre"))]'):
wrong_lemma = el.get('lemma')
1条答案
按热度按时间pod7payv1#
建议大家不要在一天累的时候工作到很晚。今天早上在再次阅读答案后,我发现问题出在XPath的语法上。
我需要做的是在布尔OR选项周围添加一个括号,缺少括号会把整个事情搞砸,下面是有效的方法:
这将不匹配以前匹配的XML片段,即使必须排除它们。