簡體   English   中英

Python lxml:如何為XML元素獲取人類可讀的XPath?

[英]Python lxml: how to get human-readable XPath for XML element?

我有一個簡短的XML文檔:

<tag1 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xmlns="http://example.com/2009/namespace">
    <tag2>
        <tag3/>
        <tag3/>
    </tag2>
</tag1>

一個簡短的Python程序加載這個XML文件,如下所示:

from lxml import etree

f = open( 'myxml.xml' )
tree = etree.parse(f)
MY_NAMESPACE = 'http://example.com/2009/namespace'
xpath = etree.XPath( '/f:tag1/f:tag2/f:tag3', namespaces = { 'f': MY_NAMESPACE } )
# get first element that matches xpath
elem = xpath(tree)[0]
# get xpath for an element 
print tree.getpath(elem)

我希望用這個代碼獲得一個有意義的,人類可讀的xpath,但是,我得到一個像/*/*/*[1]這樣的字符串。

知道是什么導致了這個以及我如何診斷這個問題?

注意:使用Python 2.7.9和lxml 2.3

看起來像getpath() (底層libxml2調用xmlGetNodePath )為命名空間文檔生成位置表達式xpath。 注釋部分的用戶mzjn指出,自lxml v3.4.0起,函數getelementpath()生成一個具有完全限定標記名稱的人類可讀xpath(使用“Clark表示法” )。 此函數通過遍歷樹從節點到根而不是使用libxml2 API調用來生成xpath。

同樣,如果lxml v3.4 +不可用,可以編寫自己的樹遍歷函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM