でXPathを使用してテキストによる要素を探しますか?ありがとう次のようなXMLを考えるとElementTreeの
10
A
答えて
29
AFAIK ElementTreeはXPathをサポートしていません。それは変更されましたか?
とにかく、あなたはlxmlと次のXPath式を使用することができます。
import lxml.etree
doc = lxml.etree.parse('t.xml')
print doc.xpath('//element[text()="A"]')[0].text
print doc.xpath('//element[text()="A"]')[0].tag
結果は以下のようになります。
A
element
9
あなたはむしろlxmlのよりも、標準ライブラリElementTreeを使用したい場合は、繰り返しを使用して、特定のテキスト値を持つすべてのサブ要素を見つけることができます。たとえば、次のように
import sys
import xml.etree.ElementTree as etree
s = """<root>
<element>A</element>
<element>B</element>
</root>"""
e = etree.fromstring(s)
if sys.version_info < (2, 7):
found = [element for element in e.getiterator() if element.text == 'A']
else:
found = [element for element in e.iter() if element.text == 'A']
print found[0].text # This prints 'A', honestly!
注:あなたはリスト内包であなたの要素のtext
値のいくつかのストリッピングを実行することがあります。
これは、XMLツリーの任意の深さまで機能します。例えば、
s = """<root>
<element>A</element>
<element><sub>A</sub></element>
</root>"""
found = [element for element in e.getiterator() if element.text == 'A']
for f in found:
print f
はあなたがXPath in ElementTreeを使用することができます
<Element element at 7f20a882e3f8>
<Element sub at 7f20a882e4d0>
0
を印刷します。 libをインストールする必要はありません。 @Bionicegeniusからのコメント怒鳴るが説明するように、あなたの要素は何人の兄弟を持っていない場合
config.findall('.//*[element="A"]/element')
は、ちょうど上記の式は動作しますが、あなたは、要素ツリーでXPathを使用してのアイデアを得ます。
+0
これは問題があります所望のノードと同じレベルのすべての要素を選択する。これにより、値AとBの両方の要素が見つかります。 これを変更して検索すると、Bを検索した場合でも、値がAの要素のみが検索されます。最初の子のみが返されます。 – Bioniclegenius
関連する問題
- 1. は、どのように、次のXMLを考えるとタグ名
- 2. 次のXMLを考えるとXSD
- 3. 単一のXMLを考えると、次のXMLを価値
- 4. XMLスキーマのキー/次のXML-スニペットを考えるとkeyref問題
- 5. は、次のXMLを考える
- 6. は次のように可能な値を考えるとスプリット
- 7. 次のXMLファイルを考えると属性
- 8. 次のようになり、大きな入力ファイルを考えるとperlの
- 9. カスタムGsonデシリアライゼーション次のようなJSONスニペットを考える
- 10. 次のようにURLを考えるとfoo.bar.car.com
- 11. 次を考えるとSQL
- 12. MATLAB次のような整数のベクトルを考えると整数
- 13. .NETのXmlシリアライザーオプションの属性次のコードを考える
- 14. 次のサンプルを考えるとAndroidの
- 15. Xqueryの次のXML変数を考える
- 16. 次のようになります文書を考えるとRavenDB
- 17. 次を考えるのPython
- 18. 次のクラスを考えると春
- 19. F#の次を考えるタイプマッチングとアクティブパターン
- 20. jChart2D - 次のコードを考えるとTracePoint2D
- 21. |次のテキストを考えると「カテゴリー」
- 22. doOnNext()は、次のチェーンを考えると
- 23. 次のテーブルを考えると
- 24. ジャンゴ:次のシナリオを考えるとデコレータ
- 25. XML ElementTreeのインデックスタグが
- 26. レール、ルビー - 正規表現を考える - のようなものを考える
- 27. は、XMLを考えるとサクソンXPathSelector
- 28. コピー要素と子どもを指定し、次のXMLを考える
- 29. はどのようにJavaScriptのコード次を考えると、外側部材
- 30. のRails 3.1は、次のモデルを考えるとポリモーフィックな関連
自分のタスクではメモリオーバーヘッドが非常に小さいため(CPU使用量よりもメモリが重要です)、これはlxmlから移動するために必要なコードの最後のビットであるため、lxmlよりもcElementTreeを使用しました。 – Patrick