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

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

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

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

4657閲覧

loadXMLが正しく読み込まない場合

SugiuraY

総合スコア317

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2017/03/15 05:38

編集2017/03/15 06:26

お世話になります。
前回の質問に関連するもので申し訳ないのですが
どうしても解決しなかったため、ご質問をさせてください。

以下の処理でXXXX.xbrlファイルをDOM操作をしたいのですが
何故か空のオブジェクトしか返しません。
①で$xmlは正しく出力されるのですが、これをDOMでloadすると出力結果の通りからのオブジェクトを返してきます。
膨大のxmlなので何らかの理由でエラーを返してくるのであれば分かるのですが空を返してくるのはどのような理由が考えられるのかご助言をいただけれ幸甚です。

宜しくお願い申し上げます。

PHP

1 $xml =file_get_contents("Z_xbrl/XXXX/XXXX/XXXX_XXXX.xbrl"); 2 3 echo($xml);//① 4 $dom = new DOMDocument('1.0', 'UTF-8'); 5 $dom->preserveWhiteSpace = false; 6 $dom->formatOutput = true; 7 $dom->loadXML($xml); 8 var_dump($dom);//② 9 10/*②の出力結果*/ 11 12DOMDocument Object 13( 14 [doctype] => 15 [implementation] => (object value omitted) 16 [documentElement] => 17 [actualEncoding] => UTF-8 18 [encoding] => UTF-8 19 [xmlEncoding] => UTF-8 20 [standalone] => 1 21 [xmlStandalone] => 1 22 [version] => 1.0 23 [xmlVersion] => 1.0 24 [strictErrorChecking] => 1 25 [documentURI] => 26 [config] => 27 [formatOutput] => 1 28 [validateOnParse] => 29 [resolveExternals] => 30 [preserveWhiteSpace] => 31 [recover] => 32 [substituteEntities] => 33 [nodeName] => #document 34 [nodeValue] => 35 [nodeType] => 9 36 [parentNode] => 37 [childNodes] => (object value omitted) 38 [firstChild] => 39 [lastChild] => 40 [previousSibling] => 41 [attributes] => 42 [ownerDocument] => 43 [namespaceURI] => 44 [prefix] => 45 [localName] => 46 [baseURI] => 47 [textContent] => 48)
①の出力結果(冒頭抜粋) G04924-000 2016-06-20 G04924-000 2015-10-01 2016-03-31 G04924-000 2015-09-30 jppfs_cor:NonConsolidatedMember G04924-000 2016-03-31 jppfs_cor:NonConsolidatedMember G04924-000 2015-04-01 2015-09-30 jppfs_cor:NonConsolidatedMember G04924-000 2015-10-01 2016-03-31 jppfs_cor:NonConsolidatedMember G04924-000 2015-03-31 jppfs_cor:UnitholdersCapitalINVMember jppfs_cor:NonConsolidatedMember G04924-000 2015-09-30 jppfs_cor:UnitholdersCapitalINVMember jppfs_cor:NonConsolidatedMember G04924-000 2015-09-30 jppfs_cor:CapitalSurplusINVMember jppfs_cor:NonConsolidatedMember G04924-000 2015-03-31 jppfs_cor:CapitalSurplusINVMember jppfs_cor:NonConsolidatedMember G04924-000 2015-09-30

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

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

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

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

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

guest

回答1

0

ベストアンサー

たぶんXMLのフォーマットの問題だと思います。
loadXMLの戻り値は確認しましたか?

成功した場合に TRUE を、失敗した場合に FALSE を返します。

http://php.net/manual/ja/domdocument.loadxml.php

①の出力結果を提示した方が早いかと思います。

投稿2017/03/15 06:10

ttyp03

総合スコア16996

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

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

SugiuraY

2017/03/15 06:25

ご回答有難うございます。 if ($dom) { echo "true";} //trueです。 また、①の出力結果ですが、ブラウザをスクロールするたびに固まる程なので、全貌の提示は不可能なのですが、初めの一部を質問のなかに提示させていただきます。
ttyp03

2017/03/15 06:27

$dom自体ではなくloadXMLの戻り値をご確認ください。 if($dom->loadXML($xml)){ // 成功 } else { // 失敗 }
SugiuraY

2017/03/15 06:36

大変失礼致しました。falseとなっております。 やはりloadに失敗しているものと存じます。
ttyp03

2017/03/15 06:47

XBRLというのがあるんですね。勉強になります。 ①の出力結果を拝見しました。 XMLをベースにしているらしいですが、出力された結果はいわゆるタグで構成されていないように見えます。 https://www.ibm.com/developerworks/jp/xml/library/x-think43/ このページのリスト1のような形なら処理できるのではと思いますが。
SugiuraY

2017/03/15 06:50

XMLのフォーマットの問題をご指摘いただきましたが、あまりにも膨大で細かく検証が難しいのですが、一部の要素の閉じタグがないことが原因のように思われます。重ねての質問で恐縮です、 1) 閉じタグがないような問題のある要素の検証方法 2) 一番上位の親タグさえ閉じタグがあれば、子や孫のタグはこれがなくとも問題なくloadする方法 これらは存在するものなのでしょうか?実務上xmlでDOM操作する場合にはこのような問題が起こりうると思うのですが、上記のような方法しか思いつかなかったため、お尋ねさせて頂きました。 何卒、宜しくお願い申しあげます。
ttyp03

2017/03/15 06:58

>1) XMLを解釈できるエディタか何かで開いてみるしかないかと。 問題があるかないかで言えば、loadXMLで読み込んでみて成功か失敗かでもいいですね。 >2) DOMは基本的に正しいフォーマットの場合のみ処理できたと思います。 まあ当然ですよね。 エラーがあっても読めるところまでは読むようなライブラリがあるかもしれませんが、結局それだと正しく処理できているわけではないので、業務で扱う処理としては適切ではないですよね。 まずは取得するXBRLのフォーマットを正すことから始めるべきでしょう。
SugiuraY

2017/03/15 07:02

回答が重なってしまい申し訳ございません。抽出して記載した部分はvalueだけが出力されており、実際のxmlファイルは https://www.ibm.com/developerworks/jp/xml/library/x-think43/ のようにちゃんとタグに囲まれた構造になっております。 しかしながら、以下のような閉じタグが存在しないものも子、孫の中に以下のような閉じたぐがなく、読み込めていない原因がありました。 ただ、これをすべて補うことができないため、上記の通りの重ねての質問となります。 宜しくお願い申しあげます。 <jpsps_cor:PlaceForPublicInspectionCoverPageTextBlock contextRef="FilingDateInstant">
SugiuraY

2017/03/15 07:03

承知を致しました、ご回答を頂き、まことに有難うございました。 やっと前進できそうです!深謝申し上げます。
ttyp03

2017/03/15 07:06

ライブラリがないか探したらこんなページがありました。 XBRL(eXtensible Business Reporting Language)・XML(eXtensible Markup Language)をPHPで解析するプロジェクト https://ja.osdn.net/projects/xbrl-php/ 試していないのでどれほど使えるかわかりませんが…。 解決策のひとつとしてお試しください。
SugiuraY

2017/03/15 07:40

有難うございます♪
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問