[英]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.