根据特定标记的文本 - XML获取父属性

时间:2017-03-09 04:40:08

标签: python xml lxml elementtree

我有一个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”   属性。

有人帮我一样。

希望这是明确的,请告诉我,我会尽力使其更清晰。

1 个答案:

答案 0 :(得分:2)

<%= radio_button_tag(:whichParam, "last_name", class: 'radio-inline') %>
<%= label_tag(:studentNum, "Student Number") %> 

OR:

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

In [4]: tree.xpath('//*[.//type="mpset"]/@id') Out[4]: ['80', '910'] # this will return all the id attribute. 根节点的后代或者自我。

//当前节点

当前节点的

.后代或者自我。

.//当前节点的后代标记类型的字符串值为.//type="mpset"

mpset获取@id属性

id是通配符,匹配任何标记