我正在尝试开发一个 Python 脚本,以便轻松提取 XML 或 HTML 文件中元素的 XPath。
例如,假设我们有下面的 XML 文件 (test.xml),我们希望为其获取“blue”的 XPATH :
<root>
<element>
<name>Element1</name>
<contains>
<element>
<name>color</name>
<value-ref>/Colors/red</value-ref>
</element>
</contains>
</element>
<element>
<name>Colors</name>
<contains>
<element>
<name>red</name>
<value>0xFF0000</value>
</element>
<element>
<name>blue</name>
<value>0x0000FF</value>
</element>
</contains>
</element>
</root>
我尝试使用 LXML,但我有点迷失了:
from lxml import etree
doc = etree.parse('test.xml')
tree = etree.ElementTree(doc.getroot())
如何获取树中带有 text="blue" 的元素的 XPath?
谢谢你, 托马斯
我不太确定这是否与已引用的问题重复。这个问题和答案似乎遍历整个树,访问每个文本节点,而我将这个问题读为简单地返回给定条件的特定节点的 xpath - 在本例中为节点
text()
- 无需访问每个节点。
上面给出的前三行实际上是正确的,您只需要添加一行即可得到最简单的答案:
from lxml import etree
doc = etree.parse('test.xml')
tree = etree.ElementTree(doc.getroot())
print(tree.getpath(doc.xpath('//*[contains(text(), "blue")]')[0]))
这给了我们结果:
(env) [tlum@localhost python-environments]$ python test.py
/root/element[2]/contains/element[2]/name
当然,如果有可能找不到标准,或者多次找到标准,我们还有更多工作要做,但我现在认为这超出了问题的范围。