2016-12-21 52 views
0

PythonでElementTreeを使用して、child2属性のipsumテキストコンテンツが「true」であるXMLファイル内のすべての要素のタイトルを取得しようとしています。ここではXMLです:私は戻ったい異なる子要素の値に基づいて子要素を取得

<element> 
    <title>Hello world</title> 
    <child1>Lorem</child1> 
    <child2 attr="ipsum">true</child2> 
</element> 
<element> 
    <title>Hello world 2</title> 
    <child1>Lorem</child1> 
</element> 
<element> 
    <title>Hello world 3</title> 
    <child1>Lorem</child1> 
    <child2 attr="ipsum">true</child2> 
</element> 

結果は以下のタイトルで構成されたリストです:

Hello world 
Hello world 3 

タイトルの2番目の要素は「こんにちは、世界2」が不足しているためで除外されますこの子要素:

<child2 attr="ipsum">true</child2> 

ヒント?

+0

: プリント( "%sの - %s" は%(element.tag、element.text)) しかし、私はそれが私の実際のchild2のになるだろうと思った、Iタイトル要素のテキストが必要です。 – emre5

答えて

0

問題の一部は、ipsumがあなたが投稿したxmlの属性ではないということです。属性attrの値です。これの別の例は、あなたが<child2 name="John"></child2>と言った場合です。この場合、nameは属性であり、Johnはその属性の値です。あなたの現在のXML構造を維持しようとしている場合は、次のコードは動作するはずです:

import xml.etree.ElementTree as ET 
tree = ET.parse('elements.xml') 
root = tree.getroot() 

for element in root: 
    childEl = element.find('child2') 
    if childEl != None and childEl.text == "true": 
     if element.find('title') != None: 
      print element.find('title').text 

それはそれは、その要素のテキスト値があるか否かが存在し、確認するためにchild2の要素を確認し、要素をループ"真"。

あなたのコードは、あなたがtrueに設定されているイプサムして説明ように動作する場合は、次のコードとXMLの例を使用することができます。

<?xml version="1.0"?> 
<data> 
    <element> 
     <title>Hello world</title> 
     <child1>Lorem</child1> 
     <child2 ipsum="true"></child2> 
    </element> 
    <element> 
     <title>Hello world 2</title> 
     <child1>Lorem</child1> 
    </element> 
    <element> 
     <title>Hello world 3</title> 
     <child1>Lorem</child1> 
     <child2 ipsum="true"></child2> 
    </element>  
</data> 

import xml.etree.ElementTree as ET 
tree = ET.parse('elements.xml') 
root = tree.getroot() 

for element in root: 
    childEl = element.find('child2') 
    if childEl != None and childEl.get("ipsum") == "true": 
     if element.find('title') != None: 
      print element.find('title').text 

・ホープ、このことができます!あなたに私が明確にしたいことがあれば教えてください。 root.iterの要素( "イプサム")のための

関連する問題