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

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

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

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

XPath(XML Path)

XML Path Language (XPath; XMLパス言語)は、マークアップ言語 XML に準拠した文書の特定の部分を指定する言語構文の事をいいます。XPathはXMLとは別の構文を使用します。XMLドキュメントの抽象、論理ストラクチャ上で動作します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

2487閲覧

接頭語のある名前空間に属する要素の抽出について(XML)

mi_ho

総合スコア34

XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

XPath(XML Path)

XML Path Language (XPath; XMLパス言語)は、マークアップ言語 XML に準拠した文書の特定の部分を指定する言語構文の事をいいます。XPathはXMLとは別の構文を使用します。XMLドキュメントの抽象、論理ストラクチャ上で動作します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/01/09 03:14

編集2019/01/09 03:51

実現したいこと

Pythonの標準ライブラリElementTreeを使用して,名前空間付きのxmlから意図した要素を抽出しようとしています.
デフォルトの名前空間xmlnsに属する要素の抽出に成功しましたが,名前空間プリフェックス(接頭語)のある名前空間に属する要素の抽出がうまくいきません.
Python3を使用しています.

読み込むxml(demo.xml)

xml

1<?xml version="1.0" encoding="UTF-8"?> 2<feed xmlns="http://www.w3.org/2000/Atom" xmlns:board="http://www.develop.com/board"> 3 <entry> 4 <id>12345</id> 5 <board:folder id="54321" /> 6 </entry> 7</feed>

###Pythonコード

python

1import xml.etree.ElementTree as ET 2 3tree = ET.parse('demo.xml') 4 5root = tree.getroot() 6 7id = root.find(".//{http://www.w3.org/2000/Atom}entry/{http://www.w3.org/2000/Atom}id") 8print("⬇️デフォルトの名前空間xmlnsに属するidを表示") 9print(id.text) 10 11id_board = root.find('.//board:folder', {'board': 'http://www.develop.com/board'}) 12print("⬇️xmlns:boardに属するidを表示") 13print(id_board.text) 14

実行結果

⬇️デフォルトの名前空間xmlnsに属するidを表示 12345 ⬇️xmlns:boardに属するidを表示 None

↑"None"と出てしまうところに,"54321"と出したいです(追記).

試したこと

xmlns:boardに属するidを示すXpathの部分を

.//{http://www.develop.com/board}board/{http://www.develop.com/board}folder

.//{http://www.w3.org/2000/Atom}board:{http://www.develop.com/board}folder

などと変えたりしてみましたが,成功しませんでした.ご教授のほどよろしくお願いいたします.

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

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

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

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

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

guest

回答1

0

ベストアンサー

質問文ちゃんと理解できていませんが過去質問PythonでElementTreeでXMLのテキストを抽出中にprefix mapエラーが出るが参考になるかと思います。

補足

属性値を取得したいのであれば.attrib['id']で取得できないでしょうか?

Python

1import xml.etree.ElementTree as ET 2 3tree = ET.parse('demo.xml') 4root = tree.getroot() 5 6id = root.find(".//{http://www.w3.org/2000/Atom}entry/{http://www.w3.org/2000/Atom}id") 7print(id.text) # 12345 8 9id_board = root.find('.//board:folder', {'board': 'http://www.develop.com/board'}) 10print(id_board.attrib['id']) # 54321

投稿2019/01/09 03:37

編集2019/01/09 05:29
can110

総合スコア38266

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

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

mi_ho

2019/01/09 04:41

ありがとうございます! 過去質問を拝見しました.こちらに倣って,問題のXpathを './/board:folder', namespaces = {'board': 'http://www.develop.com/board' } と変更してみましたが,やはり"None"と出てしまいました….
mi_ho

2019/01/09 07:19

.attrib['id']で取得できました! ありがとうございました!ベストアンサーにさせていただきます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問