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

ここでの問題は、.replace() を持つリストでも文字列でもない XML 要素で replace を使用しようとしていることです。

を使用して要素 (Element オブジェクト) を選択して=getElementsByTagName('aws:Rank')[0]いるため、作業することは 1 つだけです。

必要なデータには、次の方法でアクセスできます。

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 に答える