在Python / lxml中使用“info.get”作为子元素

时间:2014-02-10 16:36:48

标签: python xml lxml

我正在尝试使用lxml获取Python元素的属性。

这是xml的结构:

<GroupInformation groupId="crid://thing.com/654321" ordered="true">                 
    <GroupType value="show" xsi:type="ProgramGroupTypeType"/>               
    <BasicDescription>              
        <Title type="main" xml:lang="EN">A programme</Title>            
        <RelatedMaterial>           
        <HowRelated href="urn:eventis:metadata:cs:HowRelatedCS:2010:boxCover">      
            <Name>Box cover</Name>  
        </HowRelated>       
        <MediaLocator>      
            <mpeg7:MediaUri>file://ftp.something.com/Images/123456.jpg</mpeg7:MediaUri> 
        </MediaLocator>     
    </RelatedMaterial>          
</BasicDescription>             

我得到的代码如下。我要返回的位是'grouptype'下的'value'属性(示例中为“Show”)(从底部开始的第三行):

file_name = input('Enter the file name, including .xml extension: ') 
print('Parsing ' + file_name)

from lxml import etree
parser = etree.XMLParser()

tree = etree.parse(file_name, parser)                               
root = tree.getroot()

nsmap = {'xmlns': 'urn:tva:metadata:2010','mpeg7':'urn:tva:mpeg7:2008'} 

with open(file_name+'.log', 'w', encoding='utf-8') as f:  
    for info in root.xpath('//xmlns:GroupInformation', namespaces=nsmap):
       crid = info.get('groupId'))                                     
       grouptype = info.find('.//xmlns:GroupType', namespaces=nsmap)
       gtype = grouptype.get('value')
       titlex = info.find('.//xmlns:BasicDescription/xmlns:Title', namespaces=nsmap)
       title = titlex.text if titlex != None else 'Missing'

任何人都可以向我解释如何实施它吗?我快速浏览了一下xsi命名空间,但无法让它工作(并且不知道这是否正确)。

1 个答案:

答案 0 :(得分:1)

这是你在找什么?

grouptype.attrib['value']

PS:为什么围绕赋值的括号?那些看起来没必要。