我正在使用XPath和Python lxml(Python 2)。我在數據上運行了兩遍,一次選擇感興趣的記錄,一次從數據中提取值。這是一個代碼類型的示例。使用Python/lxml和XPath檢索屬性名稱和值
from lxml import etree
xml = """
<records>
<row id="1" height="160" weight="80" />
<row id="2" weight="70" />
<row id="3" height="140" />
</records>
"""
parsed = etree.fromstring(xml)
nodes = parsed.xpath('/records/row')
for node in nodes:
print node.xpath("@id|@height|@weight")
當我運行此腳本輸出:
['1', '160', '80']
['2', '70']
['3', '140']
正如你的結果,其中一個屬性丟失看到,其他的位置屬性的變化,所以我不能告訴在第2排和第3排是否是身高或體重。
有沒有辦法獲得從etree/lxml返回的屬性的名稱?理想情況下,我應該看的格式結果:
[('@id', '1'), ('@height', '160'), ('@weight', '80')]
我承認,我可以使用ElementTree的和Python解決這個特定的情況下。但是,我希望使用XPath(以及相對簡單的XPath)解決此問題,而不是使用python處理數據。
是的,這樣的作品,但它是Python的。我想使用XPath來提取數據。使用XPath允許我讓用戶定義訪問路徑。要在Python中實現,我將不得不編寫某種形式的XPath DSL,這是毫無意義的,因爲XPath是這個空間中的DSL。 –
這樣做的技巧'/ records/row/@ */concat(name(),「,」,。)'? – Andersson
不幸的不是。這給出了一個錯誤。打印parsed.xpath('/ records/row/@ */concat(name(),「,」。)') lxml.etree.XPathEvalError:Invalid expression –