繁体   English   中英

使用 LXML 在 Python 中查找字符串的 XPath

[英]Find the XPath of a string in Python with LXML

我正在尝试开发一个 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

当然,如果有可能找不到标准或多次找到标准,我们还有一些工作要做,但我现在认为这超出了问题的范围。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM