2017-03-09 5 views
1

私は次のようにあるXMLファイルを持っている:特定のタグのテキストに基づいて、親の属性を取得する - XML

<customer> 
    <customerdetails id="80"> 
     <account id="910"> 
      <attributes> 
         <premium>true</premium> 
         <type>mpset</type> 
      </attributes> 
     </account> 
     <account id="911"> 
      <attributes> 
         <premium>true</premium> 
         <type>spset</type> 
      </attributes> 
     </account> 
    </customerdetails> 
</customer> 

そのために私が持っている、ファイルを解析し、それから、必要な詳細情報を取得する必要がありますPythonのlxmlライブラリを使用しました。

XMLファイルから詳細を取得することができます。たとえば、ファイルの特定のタグからテキストを取得することができます。

from lxml import etree 
    def read_a_customer_section(self): 

     root = self.parser.getroot() 
     customer_id = "80" 
     account_id = "910" 
     type_details = root.findtext("customerdetails[@id='"+customer_id+"']/account[@id='"+account_id+"']/attributes/type") 
     print type_details 

dd = ConfigParserLxml("dummy1.xml").read_a_customer_section() 

これを使用して、特定のタグのテキストを期待通りに得ることができます。

今、私はテキストに基づいて親タグattibutesを取得する必要があります。例えば

私は、入力としてタイプ「mpset」を与える場合は、私が「customerdetails」 属性を見つける必要がある。また、 「アカウント」属性を取得することができるはずです。

誰かが同じことを手助けします。

希望があることを確認してください。そうでない場合は、私はもっと明確にしようとしています。

答えて

2
In [3]: tree.xpath('//account[.//type="mpset"]/@id') 
Out[3]: ['910'] 

OR:

In [4]: tree.xpath('//*[.//type="mpset"]/@id') 
Out[4]: ['80', '910'] # this will return all the id attribute. 

//子孫またはルートノードの自己。

.現在ノード

.//子孫又は現在のノードの自己。

.//type="mpset"現在のノードの子孫タグの種類の文字列値はmpset

@idあなたが心をいけない場合は任意のタグ

+0

と一致し、id属性

*はワイルドカードでの取得であるあなたはそれがどのように動作するかを説明することができますか? – Murali

+0

@just simple xpath。私は私の答えを更新します。 –

関連する問題