0

我从 Amazon Web-Service 获得了以下 XML。

<aws:UrlInfoResponse>
    <aws:Response>
        <aws:OperationRequest>
            <aws:RequestId>8789797</aws:RequestId>
        </aws:OperationRequest>
        <aws:UrlInfoResult>
            <aws:Alexa>
                <aws:TrafficData>
                    <aws:DataUrl type="canonical">google.com/</aws:DataUrl>
                    <aws:Rank>1</aws:Rank>
                </aws:TrafficData>
            </aws:Alexa>
        </aws:UrlInfoResult>
        <aws:ResponseStatus>
            <aws:StatusCode>Success</aws:StatusCode>
        </aws:ResponseStatus>
    </aws:Response>
</aws:UrlInfoResponse>

当我尝试提取排名时。

xmldoc = minidom.parse(response)
itemlist = xmldoc.getElementsByTagName('aws:Rank')[0]

xmlData=itemlist.replace('<aws:Rank>','').replace('</aws:Rank>','')
print xmlData

它给了我错误。

AttributeError: Element instance has no attribute 'replace'
4

1 回答 1

1

这里的问题是您尝试在 XML 元素上使用替换,该元素不是列表也不是字符串,它将具有 .replace()。

由于您通过 using 挑选出元素(这是一个 Element 对象)=getElementsByTagName('aws:Rank')[0],因此您只需要做一件事。

您可以通过以下方式获得所需的数据:

itemlist.firstChild.data

或者

itemlist.firstChild.nodeValue

(@root,你有这个权利,我不知道你为什么被否决)

现在我在解析那个 XML 时遇到了一些麻烦,因为名称空间没有绑定,但这并不是什么大问题。

可能更清楚的是这样的片段:

xmldoc = minidom.parse(response)
xmlElement = xmldoc.getElementsByTagName('aws:Rank')[0]
xmlData = xmlElement.firstChild.nodeValue
print xmlData

但老实说,您可能想在 minidom 中查看有关 Element 对象的信息:

http://docs.python.org/2/library/xml.dom.html#dom-element-objects

于 2013-01-22T07:36:04.103 回答