簡體   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