質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.49%

  • Python 2.7

    1307questions

    Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

pythonでxml内のデータを取得

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 766
<?xml version="1.0" encoding="UTF-8" ?> 
 <Results xmlns="jws">
     <APIVersion>1.0</APIVersion> 
     <Area>
         <Region cd="40" name="山陰・山陽">
             <Prefecture cd="310000" name="鳥取県">
                 <LargeArea cd="310200" name="鳥取・岩美">
                     <SmallArea cd="310202" name="鳥取" /> 
                     <SmallArea cd="310205" name="岩美" /> 
                     <SmallArea cd="310208" name="八頭" /> 
                     <SmallArea cd="310211" name="浜村・鹿野" /> 
                 </LargeArea>
                 <LargeArea cd="310500" name="倉吉・三朝・湯梨浜">
                     <SmallArea cd="310502" name="はわい・東郷" /> 
                     <SmallArea cd="310505" name="三朝" /> 
                     <SmallArea cd="310508" name="倉吉・関金" /> 
                 </LargeArea>
                 <LargeArea cd="310800" name="米子・大山">
                     <SmallArea cd="310802" name="米子・皆生・境港" /> 
                     <SmallArea cd="310805" name="大山" /> 
                 </LargeArea>
             </Prefecture>
             <Prefecture cd="320000" name="島根県">
                 <LargeArea cd="320100" name="松江・安来・玉造・奥出雲">
                     <SmallArea cd="320102" name="松江・美保関・玉造" /> 
                     <SmallArea cd="320105" name="安来" /> 
                     <SmallArea cd="320111" name="奥出雲・雲南" /> 
                 </LargeArea>
                 <LargeArea cd="320400" name="出雲・大田・石見銀山">
                     <SmallArea cd="320408" name="出雲・大社・湯の川" /> 
                     <SmallArea cd="320411" name="大田・温泉津" /> 
                 </LargeArea>
                 <LargeArea cd="320500" name="益田・浜田・津和野">
                     <SmallArea cd="320505" name="浜田・江津・有福" /> 
                     <SmallArea cd="320508" name="津和野・益田" /> 
                 </LargeArea>
                 <LargeArea cd="320800" name="隠岐島">
                     <SmallArea cd="320802" name="島前" /> 
                     <SmallArea cd="320805" name="島後" /> 
                 </LargeArea>
             </Prefecture>
             <Prefecture cd="330000" name="岡山県">
                 <LargeArea cd="330200" name="岡山・玉野・牛窓">
                     <SmallArea cd="330202" name="岡山・玉野" /> 
                     <SmallArea cd="330205" name="牛窓・日生" /> 
                 </LargeArea>
                 <LargeArea cd="330500" name="倉敷・総社・井笠">
                     <SmallArea cd="330502" name="倉敷・児島・鷲羽山" /> 
                     <SmallArea cd="330505" name="総社・井原・笠岡" /> 
                 </LargeArea>
                 <LargeArea cd="330800" name="津山・美作三湯・蒜山">
                     <SmallArea cd="330802" name="湯原・蒜山高原" /> 
                     <SmallArea cd="330805" name="津山・奥津" /> 
                     <SmallArea cd="330808" name="美作・湯郷" /> 
                 </LargeArea>
                 <LargeArea cd="331100" name="高梁・新見・吉備高原">
                     <SmallArea cd="331102" name="高梁・川上・成羽" /> 
                     <SmallArea cd="331105" name="新見・阿哲" /> 
                 </LargeArea>
             </Prefecture>
             <Prefecture cd="340000" name="広島県">
                 <LargeArea cd="340300" name="福山・竹原・呉">
                     <SmallArea cd="340302" name="福山・尾道・しまなみ" /> 
                     <SmallArea cd="340305" name="三原・竹原" /> 
                     <SmallArea cd="340308" name="呉・江田島" /> 
                 </LargeArea>
                 <LargeArea cd="340600" name="庄原・三次・芸北">
                     <SmallArea cd="340602" name="庄原・帝釈峡・神石高原" /> 
                     <SmallArea cd="340605" name="三次" /> 
                     <SmallArea cd="340608" name="芸北" /> 
                 </LargeArea>
                 <LargeArea cd="340900" name="広島・宮島">
                     <SmallArea cd="340902" name="広島" /> 
                     <SmallArea cd="340905" name="宮島・廿日市" /> 
                 </LargeArea>
             </Prefecture>
             <Prefecture cd="350000" name="山口県">
                 <LargeArea cd="350300" name="岩国・柳井・周南">
                     <SmallArea cd="350302" name="岩国" /> 
                     <SmallArea cd="350305" name="柳井・周防大島" /> 
                     <SmallArea cd="350308" name="周南・湯野" /> 
                 </LargeArea>
                 <LargeArea cd="350600" name="山口・秋芳">
                     <SmallArea cd="350602" name="山口・湯田・防府" /> 
                     <SmallArea cd="350605" name="秋芳" /> 
                 </LargeArea>
                 <LargeArea cd="351000" name="萩・長門">
                     <SmallArea cd="351002" name="萩" /> 
                     <SmallArea cd="351005" name="長門" /> 
                 </LargeArea>
                 <LargeArea cd="351300" name="下関・宇部">
                     <SmallArea cd="351302" name="宇部" /> 
                     <SmallArea cd="351305" name="下関・長府・川棚" /> 
                 </LargeArea>
             </Prefecture>
         </Region>
     </Area>
 </Results>

上記のようなxml文からSmallArea内のcdをpythonで取得したいと考えているのですが、
何か良い方法はないでしょうか?

よろしくお願いします。


追記:「じゃらんWebサービス エリア検索API」のサンプルリクエストから引用したものです。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

ElementTreeで実装してみようと思ったのですが、
上手く行かなかったのでminidomでやってみました。

全件取得の例です。
記載のデータをdata.xmlで保存してカレントディレクトリに配置しています。

from xml.dom import minidom

xml = minidom.parse('data.xml')

# 全ての SmallArea を取得
list = xml.getElementsByTagName('SmallArea')

for item in list:
    print item.attributes['cd'].value, item.attributes['name'].value

参考: How do I parse XML in Python? - Stack Overflow

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/07/09 13:49

    解決しました!
    ありがとうございます(_ _)

    キャンセル

  • 2015/07/09 14:21

    お役に立ててなによりです :)

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.49%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Python 2.7

    1307questions

    Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。