我正试图通过以下规则从XML中选择节点:
名为"的节点的父节点;标签";具有属性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')]/..")
更新
XML示例
<parent>
<tag k="k1" v="v1"/>
<tag k="k1" v="v2"/>
<tag k="k1" v="v3"/>
</parent>
ET xpath支持非常有限。但是这个黑客应该工作
roads = root.findall(".//tag[@k='k1']/..") or root.findall(".//tag[@k='k2']/..")
您肯定可以做到这一点,但XPath似乎不是过滤正确属性的方法。
roads = [el for el in root.findall(".//tag") if el.attrib["k"] == "k1" and el.attrib["v"] in ("v1", "v2")]
如果它使它更清晰,则可以将逻辑重写为el.attrib["k"] == "k1" and (el.attrib["v"] == "v1" or el.attrib["v"] == "v2")
。