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

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

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

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

Python 3.x

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

Python

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

Q&A

解決済

1回答

3219閲覧

PythonでElementTreeでXMLのテキストを抽出中にprefix mapエラーが出る

sera_sera

総合スコア16

XML

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

Python 3.x

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

Python

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

0グッド

1クリップ

投稿2018/12/05 07:14

前提・実現したいこと

Pythonにて卒業研究のためのアプリを作っている初心者です。
XMLファイルからElementTreeモジュールを使って指定したタグのテキストを抽出したいです。
以下のコードでは本来ならば、

Python

11.発行国 ::JP 22.公報種別::公開特許公報(A) 33.公開日 ::20171109 44.出願日 ::20160506 55.公開番号::2017200451 66.出願番号::2016093031 77.発明の名称::飲料 88.IPC分類::A23L 2/00 20060101AFI20171013BHJP 99.請求項の数::1 1010.全頁数::6

と表示されて欲しいです。

発生している問題・エラーメッセージ

1.発行国 ::JP Traceback (most recent call last): File "C:\Users\T15015\PycharmProjects\PatentApp\patentApp\test_area.py", line 31, in <module> print("10.全頁数 ::" + str(elem.findtext('.//jp:total-pages'))) # 全頁数 File "C:\Program Files\Python37\lib\xml\etree\ElementPath.py", line 320, in findtext elem = next(iterfind(elem, path, namespaces)) File "C:\Program Files\Python37\lib\xml\etree\ElementPath.py", line 286, in iterfind selector.append(ops[token[0]](next, token)) File "C:\Program Files\Python37\lib\xml\etree\ElementPath.py", line 118, in prepare_descendant token = next() 2.公報種別::公開特許公報(A) 3.公開日 ::20171109 4.出願日 ::20160506 5.公開番号::2017200451 6.出願番号::2016093031 7.発明の名称::飲料 8.IPC分類::A23L 2/00 20060101AFI20171013BHJP 9.請求項の数::1 File "C:\Program Files\Python37\lib\xml\etree\ElementPath.py", line 83, in xpath_tokenizer raise SyntaxError("prefix %r not found in prefix map" % prefix) from None SyntaxError: prefix 'jp' not found in prefix map

該当のソースコード

Python

1x = '2017200451.xml' 2tree = parse(x) 3elem = tree.getroot() 4print("1.発行国 ::" + str(elem.findtext('.//publication-reference/document-id/country'))) # 発行国 5print("2.公報種別::" + str(elem.findtext('.//publication-reference/document-id/kind'))) # 公報種別 6print("3.公開日 ::" + str(elem.findtext('.//publication-reference/document-id/date'))) # 公開日 7print("4.出願日 ::" + str(elem.findtext('.//application-reference/document-id/date'))) # 出願日 8print("5.公開番号::" + str(elem.findtext('.//publication-reference/document-id/doc-number'))) # 公開番号 9print("6.出願番号::" + str(elem.findtext('.//application-reference/document-id/doc-number'))) # 出願番号 10print("7.発明の名称::" + str(elem.findtext('.//invention-title'))) # 発明の名称 11print("8.IPC分類::" + str(elem.findtext('.//classification-ipc/main-clsf'))) # 国際特許分類(IPC) 12print("9.請求項の数::" + str(elem.findtext('.//number-of-claims'))) # 請求項の数 13print("10.全頁数 ::" + str(elem.findtext('.//jp:total-pages'))) # 全頁数

該当のXMLファイルの一例

XML

1<?xml-stylesheet type="text/xsl" href="../../../../../XSL/gat-a.xsl"?> 2 3<!DOCTYPE jp-official-gazette PUBLIC "-//JPO//DTD PUBLISHED PATENT/UTILITY MODEL APPLICATION 1.0//EN" "../../../../../DTD/gat-a.dtd"> 4 5<jp-official-gazette kind-of-jp="A" kind-of-st16="A" lang="ja" dtd-version="1.0" country="JP" xmlns:jp="http://www.jpo.go.jp"><bibliographic-data lang="ja" country="JP"> 6 7 <publication-reference> 8 9 <document-id> 10 11 <country>JP</country> 12 13 <doc-number>2017200451</doc-number> 14 15 <kind>公開特許公報(A)</kind> 16 17 <date>20171109</date> 18 19 </document-id> 20 21 </publication-reference> 22 23 <application-reference> 24 25 <document-id> 26 27 <doc-number>2016093031</doc-number> 28 29 <date>20160506</date> 30 31 </document-id> 32 33 </application-reference> 34 35 <invention-title>飲料</invention-title> 36 37 <parties> 38 39 <jp:applicants-agents-article> 40 41 <jp:applicants-agents sequence="1"> 42 43 <applicant sequence="1"> 44 45 <addressbook lang="ja"> 46 47 <name>株式会社Patent</name> 48 49 <registered-number>000135324</registered-number> 50 51 <address> 52 53 <text>大阪府</text> 54 55 </address> 56 57 </addressbook> 58 59 </applicant> 60 61 </jp:applicants-agents> 62 63 </jp:applicants-agents-article> 64 65 <inventors> 66 67 <inventor sequence="1"> 68 69 <addressbook> 70 71 <name>山田一郎</name> 72 73 <address> 74 75 <text>東京都</text> 76 77 </address> 78 79 </addressbook> 80 81 </inventor> 82 83 <inventor sequence="2"> 84 85 <addressbook> 86 87 <name>山田次郎</name> 88 89 <address> 90 91 <text>東京都</text> 92 93 </address> 94 95 </addressbook> 96 97 </inventor> 98 99 </inventors> 100 101 </parties> 102 103 <classification-ipc><edition/><main-clsf>A23L 2/00 20060101AFI20171013BHJP </main-clsf><further-clsf>A23L 2/52 20060101ALI20171013BHJP </further-clsf></classification-ipc> 104 105 <classification-national><country>JP</country><main-clsf>A23L2/00 B</main-clsf><further-clsf>A23L2/00 F</further-clsf></classification-national> 106 107 <number-of-claims jp:adopted-law="claim">1</number-of-claims> 108 109 <jp:request-for-examination true-or-false="false"/> 110 111 <jp:filing-form>OL</jp:filing-form> 112 113 <jp:total-pages>6</jp:total-pages> 114 115 <jp:theme-code-info> 116 117 <jp:theme-code>4B117</jp:theme-code> 118 119 </jp:theme-code-info>

試したこと

・[jp]を他の単語に置き換える
→「jp」を「jj」にreplaceで置換……エラーコード同じで「jp」が「jj」に変わっただけ

補足情報(FW/ツールのバージョンなど)

バージョン:Python3.7
開発環境:Atom1.31.2

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

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

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

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

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

guest

回答1

0

ベストアンサー

実際に試したわけではありません。
ちょっとドキュメントを読んだだけですので、確認はご自身でお願いします。

とりあえず、下記のマニュアルを読んでください。

上記の説明からすると、

python

1# XML内で「xmlns:jp="http://www.jpo.go.jp"」と指定されているので、そのネームスペースを指定 2print("10.全頁数 ::" + str(elem.findtext('.//jp:total-pages', namespaces={'jp': 'http://www.jpo.go.jp'}))) # 全頁数

でいけそうな気がします。

投稿2018/12/05 13:55

katsuko

総合スコア3469

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

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

sera_sera

2018/12/06 04:22

ありがとうございます! 解決しました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問