[解決済み] Pythonで「ElementTree」による名前空間付きXMLのパース
質問
次のようなXMLがあり、それをPythonの
ElementTree
:
<rdf:RDF xml:base="http://dbpedia.org/ontology/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:owl="http://www.w3.org/2002/07/owl#"
xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns="http://dbpedia.org/ontology/">
<owl:Class rdf:about="http://dbpedia.org/ontology/BasketballLeague">
<rdfs:label xml:lang="en">basketball league</rdfs:label>
<rdfs:comment xml:lang="en">
a group of sports teams that compete against each other
in Basketball
</rdfs:comment>
</owl:Class>
</rdf:RDF>
をすべて見つけたい。
owl:Class
タグの値を抽出し、すべての
rdfs:label
のインスタンスを作成します。私は以下のコードを使っています。
tree = ET.parse("filename")
root = tree.getroot()
root.findall('owl:Class')
名前空間があるため、以下のようなエラーが発生します。
SyntaxError: prefix 'owl' not found in prefix map
のドキュメントを読んでみました。 http://effbot.org/zone/element-namespaces.htm が、上記のXMLには複数の名前空間がネストされているため、まだ動作させることができません。
をすべて見つけるには、どのようにコードを変更すればよいか教えてください。
owl:Class
タグを使用します。
解決方法は?
を与える必要があります。
.find()
,
findall()
と
iterfind()
メソッドを明示的な名前空間辞書として使用します。
namespaces = {'owl': 'http://www.w3.org/2002/07/owl#'} # add more as needed
root.findall('owl:Class', namespaces)
プリフィクスは
のみ
で調べます。
namespaces
パラメータを渡します。つまり、好きな名前空間プレフィックスを使うことができます。
owl:
の部分で対応する名前空間の URL を調べます。
namespaces
ディクショナリを検索し、XPath 式
{http://www.w3.org/2002/07/owl}Class
の代わりに もちろん、あなた自身も同じ構文を使うことができます。
root.findall('{http://www.w3.org/2002/07/owl#}Class')
また 名前空間を利用したXMLのパース セクション を、ElementTree ドキュメントに追加しました。
に切り替えられると
lxml
ライブラリ
このライブラリは同じ ElementTree API をサポートしていますが、 名前空間を収集するために
.nsmap
属性があり、一般的に優れた名前空間のサポートがあります。
関連
-
Pythonコードの可読性を向上させるツール「pycodestyle」の使い方を詳しく解説します
-
PythonでECDSAを実装する方法 知っていますか?
-
[解決済み】TypeErrorの修正方法。Unicodeオブジェクトは、ハッシュ化する前にエンコードする必要がある?
-
[解決済み】socket.error: [Errno 48] アドレスはすでに使用中です。
-
[解決済み] builtins.TypeError: strでなければならない、bytesではない
-
[解決済み】インポートエラー。モジュール名 urllib2 がない
-
[解決済み】Flask ImportError: Flask という名前のモジュールがない
-
[解決済み】ImportError: bs4という名前のモジュールがない(BeautifulSoup)
-
[解決済み] pipでPythonの全パッケージをアップグレードする方法
-
[解決済み] virtualenvで異なるバージョンのPythonを使用する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
PythonはWordの読み書きの変更操作を実装している
-
Pythonの学習とデータマイニングのために知っておくべきターミナルコマンドのトップ10
-
パッケージングツールPyinstallerの使用と落とし穴の回避
-
Python入門 openを使ったファイルの読み書きの方法
-
Pythonショートビデオクローラーチュートリアル
-
Python Pillow Image.save jpg画像圧縮問題
-
[解決済み】ImportError: sklearn.cross_validation という名前のモジュールがない。
-
[解決済み】TypeErrorの修正方法。Unicodeオブジェクトは、ハッシュ化する前にエンコードする必要がある?
-
[解決済み】TypeErrorを取得しました。エントリを持つ子テーブルの後に親テーブルを追加しようとすると、 __init__() missing 1 required positional argument: 'on_delete'
-
[解決済み】ValueError: xとyは同じサイズでなければならない