2017-03-09 94 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() 

使用這個我可以得到預期的特定標籤的文本。

但現在我需要基於文本獲取父標籤屬性。

例如,如果我給類型「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得到id屬性

*是通配符,匹配任何標籤

+0

如果你不介意,你能解釋一下它是如何工作的? – Murali

+0

@只是簡單的xpath。我會更新我的答案。 –