私はPython lxml(Python 2)でXPathを使用しています。データの2つのパスを実行します.1つは関心のあるレコードを選択し、もう1つはデータから値を抽出します。ここにコードの種類のサンプルがあります。Python/lxmlとXPathで属性名と値を取得する
['1', '160', '80']
['2', '70']
['3', '140']
あなたは、属性が欠落している結果から、他の属性の変更の位置を見ることができますので、私は言うことができないとして:私はこのスクリプトを実行すると出力され
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")
これが身長か体重かどうか2列目と3行目。
etree/lxmlから返される属性の名前を取得する方法はありますか?理想的には、私は形式で結果を見てする必要があります。
[('@id', '1'), ('@height', '160'), ('@weight', '80')]
私はElementTreeのとPythonを使用して、この特定のケースを解決できると認識しています。しかし、私はPythonを使用してデータを処理するのではなく、XPath(および比較的単純なXPath)を使用してこれを解決したいと考えています。
はい、動作しますが、それはPythonのです。 XPathを使用してデータを抽出したい。 XPathを使用すると、ユーザーがアクセスパスを定義できるようになります。 Pythonで実装するには、ある形式のXPath DSLを書く必要があります。これは、XPathがこの領域のDSLであることを考えると意味がありません。 –
これは '/ records/row/@ */concat(name()、"、 "、。)のトリックですか? – Andersson
残念ながら。これによりエラーが発生します。 prints parsed.xpath( '/ records/row/@ */concat(name()、 "、")) lxml.etree.XPathEvalError:無効な式 –