【问题标题】:using "getElementsByTagName" to get tag <string name="ID"> in python使用“getElementsByTagName”在python中获取标签<string name="ID">
【发布时间】:2013-07-18 08:29:06
【问题描述】:

我的 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"'获取元素的值

但错误来了

Traceback (most recent call last):
  File "C:\Users\Vaibhav\Desktop\Webtrends\test.py", line 43, in <module>
    xmlTag = dom.getElementsByTagName('string name="ID"')[0].toxml()
IndexError: list index out of range

如果我替换

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

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

输出来了

“nCGhwaZNpy6”

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

“02.11.2013 斯科特移动”

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

但是有两个字符串标签 name="ID" 和 name="name" 如何仅访问 name="ID" 的字符串标签

【问题讨论】:

    标签: python python-2.7 xml-parsing


    【解决方案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
    

    【讨论】:

    • 对于它说的等效代码 ImportError: No module named lxml.html
    • @Vaibhav,lxml 不包含在 Python 标准库中。我为每个库添加了链接。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-17
    • 1970-01-01
    • 2015-02-15
    • 1970-01-01
    • 2021-11-17
    • 2020-01-06
    相关资源
    最近更新 更多