Python ElementTree XPath несколько условий для атрибутов - PullRequest
0 голосов
/ 10 июля 2020

Я пытаюсь выбрать узлы из моего XML по следующим правилам:

родительский узел узла с именем «tag» с атрибутами k = 'k1' и (v = 'v1' или v = 'v2')

Как я могу добиться этого, используя python и ElementTree? Я попробовал следующий код, но получил ошибку «SyntaxError: недопустимый предикат»

roads = root.findall(".//tag[@k='k1'][@v='v1' or @v='v2']/..")
roads = root.findall(".//tag[@k='k1' and (@v='v1' or @v='v2')]/..")

UPDATE

XML sample

<parent>
  <tag k="k1" v="v1"/>
  <tag k="k1" v="v2"/>
  <tag k="k1" v="v3"/>
 </parent>

1 Ответ

0 голосов
/ 10 июля 2020

Поддержка ET xpath очень ограничена. Но этот хак должен работать

roads = root.findall(".//tag[@k='k1']/..") or root.findall(".//tag[@k='k2']/..") 
...