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

2024-05-19 16:36:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我的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行,在 xmlTag=dom.getElementsByTagName('string name=“ID”')[0].toxml() 索引器错误:列表索引超出范围

如果我换了

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

dom.getElementsByTagName('string')[0].toxml()

输出来了

“nCGhwaZNpy6”

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

“2013年11月2日斯科特移动”

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

但是有两个字符串标记name=“ID”和name=“name” 如何仅访问name=“ID”的字符串标记


Tags: name标记id列表stringdomfileen
1条回答
网友
1楼 · 发布于 2024-05-19 16:36:09

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

必须比较每个string标记的name属性值。

....
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

相关问题 更多 >