使用“getElementsByTagName”在python中获取标签<string name =“ID”> </string>

时间:2013-07-18 08:29:06

标签: python python-2.7 xml-parsing

我的XML文件是

<list>
  <ProfileDefinition>
    <string name="ID">nCGhwaZNpy6</string>
    <string name="name">02.11.2013 Scott Mobile</string>
    <decimal name="AccountID">10954</decimal>
    <decimal name="TimeZoneID">-600</decimal>
  </ProfileDefinition><ProfileDefinition>
    <string name="ID">9JsG57bRUu6</string>
    <string name="name">Huggies US-EN & CA-EN Test Town Responsive - Prod</string>
    <decimal name="AccountID">10954</decimal>
    <decimal name="TimeZoneID">-600</decimal>
  </ProfileDefinition><ProfileDefinition>
    <string name="ID">I3CJQ4gDkK6</string>
    <string name="name">Huggies US-EN Brand Desktop - Prod</string>
    <decimal name="AccountID">10954</decimal>
    <decimal name="TimeZoneID">-600</decimal></ProfileDefinition>

我的代码是

import urllib2

theurl = 'https://ws.webtrends.com/v2/ReportService/profiles/?format=xml'




pagehandle = urllib2.urlopen(theurl)



##########################################################################

from xml.dom.minidom import parseString

file = pagehandle


data = file.read()

file.close()

dom = parseString(data)

xmlTag = dom.getElementsByTagName('string name="ID"')[0].toxml()

xmlData=xmlTag.replace('<string name="ID">','').replace('</string>','')

print xmlTag

print xmlData

我希望获得带有标记名'string name =“ID”'

的元素值

但错误来了

追踪(最近一次通话):   文件“C:\ Users \ Vaibhav \ Desktop \ Webtrends \ test.py”,第43行,in     xmlTag = dom.getElementsByTagName('string name =“ID”')[0] .toxml() IndexError:列表索引超出范围

如果我替换

dom.getElementsByTagName('string name =“ID”')[0] .toxml()

dom.getElementsByTagName( '字符串')[0] .toxml()

输出来了

“nCGhwaZNpy6”

因为它是该列表的第一个元素 但第二个要素是

“02.11.2013 Scott Mobile”

也会保存在我不想要的列表中

但是有两个字符串标记,其中name =“ID”,name =“name” 如何访问名称=“ID”的字符串标记

1 个答案:

答案 0 :(得分:1)

string name="ID"不是标记名称。只有string是标记名称。

您必须比较每个string代码的名称属性值。

....
dom = parseString(data)
for s in dom.getElementsByTagName('string'):
    if s.getAttribute('name') == 'ID':
        print s.childNodes[0].data

我建议您使用lxmlBeautifulSoup

以下是使用lxml的等效代码。

import lxml.html
dom = lxml.html.fromstring(data)
for s in dom.cssselect('string[name=ID]'):
    print s.text