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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

668閲覧

python3 xmlファイルのデータ抽出したい

ITOMO5963

総合スコア98

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2021/11/10 04:15

編集2021/11/10 06:02

#実現したいこと
xmlファイル(test.xml)で特定のデータ抽出したいです。
ファイルに記載のある<spot><orgin>の値を抽出したいですが、うまく動作しません。
ご教示おねがいします。

[理想の出力結果]

バスケ,アメリカ サーカー,イングランド 野球,キューバ―

[test.xml]

xml

1<zabbix_export> 2 <sports> 3 <sport> 4 <sport>バスケ</sport> 5 <orgin>アメリカ</orgin> 6 <code>USA</code> 7 </sport> 8 <sport> 9 <sport>サッカー</sport> 10 <orgin>イングランド</orgin> 11 <code>ENG</code> 12 </sport> 13 <sport> 14 <sport>野球</sport> 15 <orgin>キューバ</orgin> 16 <code>CUB</code> 17 </sport> 18 </sports> 19</zabbix_export>

[export.py]

python3

1import xml.etree.ElementTree as ET 2 3# XMLファイル取得 4ml = "C:\Tool\test.xml" 5 6#XMLファイルを解析 7tree = ET.parse(xml) 8# XMLを取得 9root = tree.getroot() 10for child in root: 11 print(child.tag) 12

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

python

1root = tree.getroot() 2 3sports = [(e.find('sport').text, e.find('orgin').text) for e in root.findall('.//sports/sport')] 4 5for l in sports: 6 print(','.join(l)) 7 8# 9バスケ,アメリカ 10サッカー,イングランド 11野球,キューバ

投稿2021/11/10 04:40

編集2021/11/10 06:33
melian

総合スコア19712

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ITOMO5963

2021/11/10 06:04

ありがとうございます。 XMLを修正しました。修正したバージョンでは、うまく動作しません。
melian

2021/11/10 06:11

更新しました。
melian

2021/11/10 06:35 編集

root.findall('sports/sport') を root.findall('.//sports/sport') に修正しました。 ".//" を付ける事で任意の深さにある sports ノードを取得できます。
ITOMO5963

2021/11/10 07:08

ありがとうございます
guest

0

BeautifulSoupを使うと、以下のようになります。

python

1>>> from bs4 import BeautifulSoup 2>>> print(xml) 3<sports> 4 <sport> 5 <sport>バスケ</sport> 6 <orgin>アメリカ</orgin> 7 <code>USA</code> 8 </sport> 9 <sport> 10 <sport>サッカー</sport> 11 <orgin>イングランド</orgin> 12 <code>ENG</code> 13 </sport> 14 <sport> 15 <sport>野球</sport> 16 <orgin>キューバ</orgin> 17 <code>CUB</code> 18 </sport> 19</sports> 20>>> soup =BeautifulSoup(xml) 21>>> for e in soup.find_all('sport'): 22... if e.find('orgin'): 23... print(f"{e.find('sport').text},{e.find('orgin').text}") 24... 25バスケ,アメリカ 26サッカー,イングランド 27野球,キューバ

投稿2021/11/10 04:33

ppaul

総合スコア24666

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ITOMO5963

2021/11/10 07:08

回答ありがとうございました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問