0

サイトのサムネイルに縮小Webサービスを使用しようとしています。サイトのサムネイルを作成できるかどうかを通知するXMLを返すAPIがあります。ElementTreeを使用してxmlを解析しようとしていますが、必要な情報を取得する方法がわかりません。XML応答の例を次に示します。

<?xml version="1.0" encoding="UTF-8"?> 
<stw:ThumbnailResponse xmlns:stw="http://www.shrinktheweb.com/doc/stwresponse.xsd">
    <stw:Response>
        <stw:ThumbnailResult>
            <stw:Thumbnail Exists="false"></stw:Thumbnail>
            <stw:Thumbnail Verified="false">fix_and_retry</stw:Thumbnail>
        </stw:ThumbnailResult>
        <stw:ResponseStatus>
            <stw:StatusCode>Blank Detected</stw:StatusCode>
        </stw:ResponseStatus>
        <stw:ResponseTimestamp>
            <stw:StatusCode></stw:StatusCode>
        </stw:ResponseTimestamp>
        <stw:ResponseCode>
            <stw:StatusCode></stw:StatusCode>
        </stw:ResponseCode>
        <stw:CategoryCode>
            <stw:StatusCode>none</stw:StatusCode>
        </stw:CategoryCode>
        <stw:Quota_Remaining>
            <stw:StatusCode>1</stw:StatusCode>
        </stw:Quota_Remaining>
    </stw:Response>
</stw:ThumbnailResponse>

「stw:StatusCode」を取得する必要があります。「stw:StatusCode」で検索しようとすると、「予期されるパス区切り文字」構文エラーが発生します。ステータスコードを取得する方法はありますか?

4

1 に答える 1

1

Grrr名前空間....これを試してください:

STW_PREFIX = "{http://www.shrinktheweb.com/doc/stwresponse.xsd}"

(サンプルXMLの2行目を参照)

次に、のようなタグが必要な場合はstw:StatusCodeSTW_PREFIX + "StatusCode"

更新:そのXML応答は、最も優れた設計ではありません。1つの例から、2番目のレベルのノードが1つ以上存在する可能性があるかどうかを推測することはできません。各第3レベルのノードには「StatusCode」の子があることに注意してください。これは、(1)STW_PREFIXケーパーが必要な理由(2)使用可能な情報の抽出を示す大まかなコードです。

import xml.etree.cElementTree as et
def showtag(elem):
    return repr(elem.tag.rsplit("}")[1])
def showtext(elem):
    return None if elem.text is None else repr(elem.text.strip())
root = et.fromstring(xml_response) # xml_response is your input string
print repr(root.tag) # see exactly what tag is in the element
for child in root[0]:
    print showtag(child), showtext(child)
    for gc in child:
        print "...", showtag(gc), showtext(gc), gc.attrib

結果:

'{http://www.shrinktheweb.com/doc/stwresponse.xsd}ThumbnailResponse'
'ThumbnailResult' ''
... 'Thumbnail' None {'Exists': 'false'}
... 'Thumbnail' 'fix_and_retry' {'Verified': 'false'}
'ResponseStatus' ''
... 'StatusCode' 'Blank Detected' {}
'ResponseTimestamp' ''
... 'StatusCode' None {}
'ResponseCode' ''
... 'StatusCode' None {}
'CategoryCode' ''
... 'StatusCode' 'none' {}
'Quota_Remaining' ''
... 'StatusCode' '1' {}
于 2011-03-30T01:41:51.740 に答える