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

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

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

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

Q&A

解決済

8回答

3245閲覧

PHPの正規表現につきまして

SugiuraY

総合スコア317

PHP

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

0グッド

1クリップ

投稿2016/12/27 04:19

編集2016/12/27 05:47

お世話になっております。
チェッカーでは正しく“流動資産”という文字列を抽出できるのですが、php本体でうまくpreg_matchすることができません。
なお、HTMLは実際には.xbrlの拡張子で記載されるものの一部の抜粋になります。
なぜかチェッカーではうまく抽出はできます。
http://okumocchi.jp/php/re.php
どなたか、理由がお分かりの方
お力添えの程、宜しくお願い申しあえげます。

HTML

1sample.xbrl 2<span style="font-family: &apos;MS Mincho&apos;; font-size: 12px">流動資産 3 </span> 4 </p> 5 6

php

1<?php 2 3$get=file_get_contents("sample.xbrl"); 4#echo($get); 5 6preg_match_all('/font-size: 12px">(.+?)<\/span>/s', $get, $matches); 7echo "<pre>"; 8print_r($matches); 9echo"</pre>";

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

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

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

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

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

toutou

2016/12/27 04:36

preg_match_allの後ってあってます?
SugiuraY

2016/12/27 05:35

ご回答有難うございます。特に相違はございません。宜しくお願い申し上げます。
guest

回答8

0

PHP マニュアルサイト内の"DOMElement::getAttribute"の項目で

php

1 $valueID = $searchNode->getAttribute('ID');

のコードが出ております。
関連メソッドとして

PHP

1 public DOMAttr getAttributeNode ( string $name ) 2 public DOMAttr getAttributeNodeNS ( string $namespaceURI , string $localName ) 3 public string getAttributeNS ( string $namespaceURI , string $localName )

も挙げられています。

私は以下の本を持っていますが、これは古本しかないようです。なお、DOMはjavaのサンプルが載っています。

XML逆引きクイックリファレンス―XML1.0(3rd Edition)対応 2006/7/1発行
坂田健二 著 毎日コミュニケーションズ刊

検証までおつきあいしませんで、ちょっと気が引けますが、そんなブレークスルーもプログラミングの醍醐味ですから、どうぞXMLおよびXBRLを極められますように。

投稿2017/01/05 09:26

編集2017/01/05 09:28
seastar3

総合スコア2285

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

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

SugiuraY

2017/01/05 10:08

ご回答有難うございます。 とんでもございません、最後までお付き合いを頂き、まことに有難うございます。 重ねて深謝を申し上げます。 早速、また没頭の時間に入ります。 何卒、宜しくお願い申し上げます。
guest

0

昔のフォルダを探したら、以下のような平成25年のカンファレンスへの研究報告のために作成したスライドがあったので、参考までにアップします。
スライド1 XBRL-FR構造図 (財務諸表報告用)
イメージ説明

スライド2 XBRL-GL構造図 (日次処理の仕訳用)
イメージ説明

データの構造を押さえれば、DOMでもXPATHでも目的のノードを操作できます。

投稿2017/01/04 13:16

seastar3

総合スコア2285

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

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

SugiuraY

2017/01/04 13:55

重ねて、ありがとうございます。 現在必死にDOMを調べながら、xbrlファイルを操作しようとしているのですが、なかなかうまくいきません。DOMツリーの構造を見ると、 $nodeList = $dom->getElementsByTagName("xbrli:xbrl"); $root = $nodeList->item(0)->getElementsByTagName("jppfs_cor:CashAndDeposits"); でも何も取得ができません、、、、 そもそもprint_r($nodeList);の時点で DOMNodeList Object ( [length] => 0 )という結果となり、 xbrli:xbrlタグの中身が取得できていないようです。 実際には、以下のようなコードを書いているのですが、ちょっと問題がわからずに行き詰まっているのですが、 <?php $xml =file_get_contents("a_npr.xbrl"); #echo $xml; $dom = new DOMDocument('1.0', 'UTF-8'); $dom->preserveWhiteSpace = false; $dom->formatOutput = true; $dom->loadXML($xml); $nodeList = $dom->getElementsByTagName("xbrli:xbrl"); print_r($nodeList); $root = $nodeList->getElementsByTagName("jppfs_cor:CashAndDeposits"); foreach ($root as $key) { echo $key->nodeValue; } ?> 先ほどのいただいた情報でいけば、まず財務報告用のインスタンスの構造を抑えて操作しようとしているのですが、 もし、お気付きの点があればアドバイスをいただけますでしょうか? よろしくお願い申し上げます。
seastar3

2017/01/05 11:11 編集

急がば回れで、単純な会計報告XMLを作って任意のノード、属性、内容を取り出せるように実験してみましょう。 会計報告.XML <会計報告> <企業名>グローバル物産</企業名> <会計期間>2016年度</会計期間> <現金 単位="円" 集計時期="年度末" 貸借区分="借">100</現金> <買掛金 単位="円" 集計時期="年度末" 貸借区分="貸">10</買掛金> <資本金 単位="円" 集計時期="年度末" 貸借区分="貸">50</資本金> <売上高 単位="円" 集計時期="当期" 貸借区分="貸">300</売上高> <仕入高 単位="円" 集計時期="当期" 貸借区分="借">260</仕入高> <当期純損益 単位="円" 集計時期="当期">+40</当期純損益> <注記 番号="1" 重要度="高">元切下げ特別損失を計上済み</注記> <注記 番号="2" 重要度="中">子会社 豊国工業の内容も連結済み</注記> </会計報告> 例えば上記のようなXMLファイルを用意して、資本金の残高金額や単位属性を表示することができるか。貸借区分が"借"の合計と"貸"の合計とを取り出せるか、また両合計の比較判定を表示できるかなどのXML操作を試してみると、日本語タグだけに難易度が易しく感じられると思います。 その上で名前空間付きのXBRLファイルを操作すると、うまくいくのではないでしょうか。 検証なさっているように、print_r命令はくどいくらい途中に入れてはコメント化していくと、XMLオブジェクトのかたまりの姿がだんだん見えてきます。
SugiuraY

2017/01/04 15:46

夜分にもかかわらず、お返事ありがとうございます。 ①資本金の残高金額は $xml =file_get_contents("会計報告.xml"); #echo $xml; $dom = new DOMDocument('1.0', 'UTF-8'); $dom->preserveWhiteSpace = false; $dom->formatOutput = true; $dom->loadXML($xml); $nodeList = $dom->getElementsByTagName("会計報告")->item(0); #print_r($nodeList); $root = $nodeList->getElementsByTagName("資本金")->item(0); #print_r($root); print_r($root->nodeValue); というとことで、50が取得できようかと思います。また、ここで初めて操作していて気がついたのですが->item(0)はlengthではなく、オブジェクトのそれぞれのプロパティを返すという意味合いかと推察しました。->item(1)とすると何も返り値がないのは謎ではありますが。 ②単位の取得は以下の通りかと思います。 $xml =file_get_contents("norm.xml"); #echo $xml; $dom = new DOMDocument('1.0', 'UTF-8'); $dom->preserveWhiteSpace = false; $dom->formatOutput = true; $dom->loadXML($xml); $nodeList = $dom->getElementsByTagName("会計報告")->item(0); #print_r($nodeList); $root = $nodeList->getElementsByTagName("資本金")->item(0); #print_r($root); echo $root->getAttribute("単位"); #print_r($root->nodeValue); 属性の取得はgetAttributeですね。これは$rootオブジェクトの中のgetAttributeメソッドを呼び出すことで、属性の値を取得しているということなのでしょうか?print_r($root);でDOMElement Objectの中身を観察すると、単位に関する情報がないようにみ言えるのですが[attributes] => (object value omitted)というところで表示が省略されているという意なのかもしれません。。。 ③属性フィルタを利用したvalueの取得はJQUERYでの("資本金[貸借区分="借"]").css(...)のような方法ならわかるのですが、PHPではDOM、属性フィルタで調べても出てきませんでした。
SugiuraY

2017/01/04 15:47

手元のxbrlでちょっと同じ要領で試してみます!
SugiuraY

2017/01/04 15:57

やはり、多分根本的に何かを間違っていますね。。 $nodeList = $dom->getElementsByTagName("xbrli:xbrl")->item(0); print_r($nodeList); の時点で何も展開されないので、ちょっと考えてみます。 夜分に大変失礼いたしました。
SugiuraY

2017/01/04 23:33

おはようございます。 一晩、こねこねしていてわかったのですが、対象につきまして、xbrlgetElementsbytagnameにおいて、接頭辞を除外すれば抽出する事ができました。しかしながら、名前空間を無視する方法は適切ではないと考えられるため、名前空間を使用する場合の抽出方法を調べてみます。
seastar3

2017/01/04 23:44

SugiuraYさん、おはようございます。 XBRL漬けで徹夜したんですか。(~_+;;) 私も20年ほど前にモデム接続でネットスケープブラウザにWebページを初めて表示できたときは、夜が更けるのも忘れて熱中したものでした。 Sugiuraさんを見習って、私もRubyOnRailsフレームワークをマスターしていきます。 お互い頑張りましょう。
SugiuraY

2017/01/05 08:20

すみません、最後に一つだけお伺いさせてください。 かなり当初に仰っていた、会計期間の属性(contextRef)を絞る方法ですが、 getElementsbytagnameに加えて属性を指定する方法がどうしてもPHPで見つけることができません。(そもそもマニュアルも記事もあまり、PHPでDOMを操作するものが出てこないのですが) こちらの方法等が載っているサイトやアドバイスを頂けますでしょうか。 度々、申し訳ございませんが、何卒、宜しくお願い申し上げます。
guest

0

もうひとつ補足として、私のXML習作集「XML研究の目次」私の研究レポート「簿記の記帳と財務諸表作成へのXML技術の応用」を挙げておきます。
私は仕訳をXMLで表現できないか研究を始め、あとでXBRLのことを知ったので、記帳用のXBRL-GLの操作を中心に勉強してきました。一方、XBRL-FRの構造の単純さにちょっといなされた感じがしました。
SugiuraYさんも、自分なりの単純化したXBRLファイルを用意して、ダンプしたり、集計したりしてみるとXMLを操作する感覚が分かってくると思います。

投稿2017/01/04 08:43

編集2017/01/05 09:30
seastar3

総合スコア2285

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

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

0

SugiuraYさん、あけましておめでとうございます。
正月休み返上でDOMを研究なさったご様子で、頭が下がります。
私もRubyOnRailsの初歩をマスターするつもりでいながら、録り貯めたビデオの鑑賞で時を費やしてしまいました。
さて、XBRLのDOM操作ですが、まず勘定科目名のノードが< ></ >に挟まれているのではなく、

XBRL

1<jpfr-t-cte:CurrentAssets contextRef="CurrentQuarterConsolidatedInstant" unitRef="JPY" decimals="-6">123456000000</jpfr-t-cte:CurrentAssets>

のように名前空間の接頭語jpfr-t-cte:をつけて並んでいます。各勘定のノードが挟んでいるのは残高金額でタグ中の四半期の当期分の金額で有り、通貨"JPY"で、表示単位は百万円単位にくくることを示しています。
タグの深さはルート直下のxbrli:xbrlの子ノードに全ての情報がフラットに並べられています。
最初の方に並んでいるlink:schemaReflink:roleRefが外部のタクソノミ情報を宣言し、末尾の方でXLinkを作用させています。
参考になるかどうかいささか自信がありませんが、4年前にHTML&VBScriptでXBRLファイルを簡易解析するコードを作ったので以下にアップします。これが"MSXML2.DOMDocument"クラスが古いのか、IE11が相性が悪いのか、私のWindows8.1機では今動かすことができません。とりあえず、DOM操作の流れを概観してみて下さい。

HTML

1<html> 2<head> 3<title>XBRL-FR_ac_get_dom1</title> 4<script type="text/vbscript"> 5<!-- 6Option Explicit 7Sub onLord() 8End Sub 9 10Sub Syori() 11 dim xmldoc,fileValue,NodesEntryDetail,productPrice 12 dim ACMeiList,ACMeiNode,ACBan,i,karikei,kasikei 13 dim AEntryDetail,NumDetail,DCflg 14 dim ACCount,ACAmountList,ShortAC,XbrlFileMei 15 set xmldoc=CreateObject("MSXML2.DOMDocument") 16 xmldoc.async=False 17 xmldoc.setProperty "SelectionLanguage","XPath" 18 xmldoc.setProperty "SelectionNamespaces", " xmlns:jpfr-t-cte='http://info.edinet-fsa.go.jp/jp/fr/gaap/t/cte/2011-03-14' xmlns:jpfr-t-sec='http://info.edinet-fsa.go.jp/jp/fr/gaap/t/sec/2011-03-14' xmlns:link='http://www.xbrl.org/2003/linkbase' xmlns:xlink='http://www.w3.org/1999/xlink' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:jpfr-oe='http://info.edinet-fsa.go.jp/jp/fr/gaap/o/oe/2011-03-14' xmlns:jpfr-di='http://info.edinet-fsa.go.jp/jp/fr/gaap/o/di/2011-03-14' xmlns:xbrli='http://www.xbrl.org/2003/instance' " 19 XbrlFileMei=MyForm.XbrlFRFile1.value 20 fileValue=xmldoc.load(XbrlFileMei) 21 If fileValue=False Then 22 MsgBox "XBRL-FR ファイル 読み込みエラー" 23 End If 24 25 ACMeiList="" 26 set ACMeiNode=xmldoc.getElementsByTagName("./xbrli:xbrl/*") 27' set ACMeiNode=xmldoc.getElementsByTagName("./xbrli:xbrl/[contains(.,'jpfr-t-cte:')]") 28' set ACMeiNode=xmldoc.selectNodes("./xbrli:xbrl/") 29 30 31 ACCount=0 32 If ACMeiNode.length>0 Then 33 For i=0 to ACMeiNode.length-1 34 If InStr(ACMeiNode(i).nodeName, "jpfr-t-cte:") Then 35 ShortAC = Replace(ACMeiNode(i).nodeName, "jpfr-t-cte:" ,"") 36 ACMeiList=ACMeiList & ShortAC & vbCrLf 37 ACCount=ACCount+1 38 End If 39 Next 40 End If 41 myForm.showArea1.value=ACMeiList 42 msgbox "勘定科目出現回数:" & ACCount 43 44 ACAmountList="<table border='1'><tr align='center'><th bgcolor='#FFFFCC'>勘定科目</th><th bgcolor='#CCFF66'>金額</th>Amount<tr>" & vbCrLf 45 If ACMeiNode.length>0 Then 46 For i=0 to ACMeiNode.length-1 47 If InStr(ACMeiNode(i).nodeName, "jpfr-t-cte:") AND InStr(ACMeiList, ACMeiNode(i).Text)=0 Then 48 ShortAC = Replace(ACMeiNode(i).nodeName, "jpfr-t-cte:" ,"") 49 ACAmountList = ACAmountList & "<tr><td bgcolor='#FFCCFF'>" & ShortAC & "</td><td bgcolor='#CCFF66' align='right'>" & FormatNumber(ACMeiNode(i).Text,,,,-1) & "</td></tr>" & vbCrLf 50 End If 51 Next 52 End If 53 ACAmountList= ACAmountList & "</table>" 54 document.getElementByID("showArea2").innerHTML = ACAmountList 55End Sub 56 57Sub XbrlFRFile1_onChange() 58 Syori() 59End Sub 60--> 61</script> 62</head> 63<body bgcolor="#66CCFF"> 64<br> 65<h1 align="center">EDI-NetのXBRL-FRファイルの勘定科目データ簡易抽出ページ</h1> 66 67 <form name="myForm"> 68 <p> 69 勘定科目(Account)を抽出したいXBRL-FRファイルのパス <br /> 70 <input id="XbrlFRFile1" type="file" size="160" /></p> 71 <p> 72勘定科目リスト<br> 73 <textarea name="showArea1" cols="60" rows="15" Readonly="true"></textarea><br> 74<br> 75 </form> 76XBRL FR 勘定残高リスト (複数あるのは前期分と当期分を示している)<br> 77 <div id="showArea2"></div> 78</body> 79</html>

これは確かに4年前のウインドウズ7機では動きました。
また、英語勘定科目名と日本語勘定科目名を並べたAccountListcsvファイルを線形探索して和訳して一覧表示するXBRL-FR_ac_get_dom4.htmも開発しました。

AccountList.csv

1科目名[en:label],Account classes,科目名[ja:label],name,balance,periodType 2Non-current assets,,非流動資産,NoncurrentAssetsAbstract,,duration 3Cash and cash equivalents,Assets,現金及び現金同等物,CashAndCashEquivalents,debit,instant 4Current assets,Assets,流動資産,CurrentAssets,debit,instant 5Assets,Assets,資産,Assets,debit,instant 6Liabilities,,負債,LiabilitiesAbstract,,duration 7Equity,Equities,資本,Equity,credit,instant 8 : 9 : 10

また、XBRLの技術について詳しい書籍として
XML技術とXBRLデータ標準を用いたインターネット財務情報システム」湯浦克彦著 ソフトリサーチセンター刊
をお勧めします。もう古本でしか手に入らないのではないかと思い、アマゾンで検索してみるとまだ発行されていて少し驚きました。タクソノミやスキーマやXML操作技法が出ていてかなり参考になります。
今、ご提供できる手掛かりはこの程度です。では、本年がよい年になりますように。

投稿2017/01/04 08:24

seastar3

総合スコア2285

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

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

SugiuraY

2017/01/04 08:35

seastar様 年始、早々にご多忙な時期にご回答を頂き、誠に有難うございます。 サンプルのコード並びに書籍情報を含めてご教示を頂き、ありがとうございます。 .xbrlのなかで随所にご指摘のノードを見つけることができました。早速諸々のDOM操作を試してみたいと思います。 改めまして深く御礼を申し上げます。
guest

0

EDINET上のXBRL-FRのデータファイルには、日本語の勘定科目は振られていないので、CurrentAssetsで検索するとその金額なり、目的の会計期間なりが検索できます。
日本語の勘定科目名はXLinkのしくみで対応表からもってくるようになっています。XLinkについては残念ながら具体的には私も理解できていません。
ただ、XBRLはXMLファイルなので、XMLオブジェクトとして定義してDOMの操作をするのが、スマートです。
VBScriptでの私の習作の一部ですが、以下のコード例がXMLデータをDOM操作するコードの例です。

HTML内のVBScriptでのXML

1 set xmldoc=CreateObject("MSXML2.DOMDocument") 2 xmldoc.async=False 3 xmldoc.setProperty "SelectionLanguage","XPath" 4 xmldoc.setProperty "SelectionNamespaces", " xmlns:jpfr-t-cte='http://info.edinet-fsa.go.jp/jp/fr/gaap/t/cte/2011-03-14' xmlns:jpfr-t-sec='http://info.edinet-fsa.go.jp/jp/fr/gaap/t/sec/2011-03-14' xmlns:link='http://www.xbrl.org/2003/linkbase' xmlns:xlink='http://www.w3.org/1999/xlink' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:jpfr-oe='http://info.edinet-fsa.go.jp/jp/fr/gaap/o/oe/2011-03-14' xmlns:jpfr-di='http://info.edinet-fsa.go.jp/jp/fr/gaap/o/di/2011-03-14' xmlns:xbrli='http://www.xbrl.org/2003/instance' " 5 XbrlFileMei=MyForm.XbrlFRFile1.value 6 fileValue=xmldoc.load(XbrlFileMei) 7 set ACMeiNode=xmldoc.getElementsByTagName("./xbrli:xbrl/*")

phpならば、

PHP

1 $dom = new DOMDocument('1.0', 'UTF-8'); 2 $dom->preserveWhiteSpace = false; 3 $dom->formatOutput = true; 4 $dom->load("sample.xbrl"); 5 $root = $dom->getElementsByTagName("xbrli:xbrl")->item(0); 6 $sampleNode = $root->getElementsByTagName("jpfr-t-cte:CurrentAssets")->item(0); 7 echo $sampleNode->nodeValue;

のような形式で金額を抜き出すのでしょう。上記のコード内の"jpfr-t-cte:勘定科目名"の記述は、jpfr-t-cteというネーム空間での規則でXMLファイルを操作しているという印です。ただ、一つのxbrlファイルの中に前期や四半期などの複数の会計期間の金額が入っていることがあるので、会計期間の属性(contextRef)を絞らなければならないでしょう。
検証を省略したアドバイスで恐縮ですが、参考になれば幸いです。

投稿2016/12/27 09:22

編集2016/12/27 09:26
seastar3

総合スコア2285

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

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

SugiuraY

2016/12/27 23:33

ご回答誠に有難うございます。 ご指摘の内容、目から鱗でした。。 ①勘定科目等、英語でも構わないのですが、EDINETが公表している一覧表みたいなものはあるのでしょうか? ②また、注記等他の開示項目も独自のidを持っているのでしょうか? EDINET内を調べたのですが、わからなかったため、もしご存知であればご教示頂けますでしょうか。 宜しくお願い申し上げます。
seastar3

2016/12/28 08:41

XBRLの構造の規格を定義するものをタクソノミといいます。 ご質問1の勘定科目の規格も、次のURLの金融庁の「2016年版EDINETタクソノミの公表について」からダウンロードできます。来年度版も策定中のようです。 http://www.fsa.go.jp/search/20160314.html 質問2についてもこのEDINETタクソノミに手掛かりがあります。また次のURLのXBRL Japan発行のXBRL FACT BOOKが実際的な情報が簡潔にまとまっていてとても参考になります。 https://www.xbrl.or.jp/uploads/fckeditor/download/factbook/2013/FACTBOOK2013.pdf 実際のxbrlファイルは、報告形式や企業情報や各勘定残高や脚注情報が平板に並んでいるので、付記事項等はファイルの末尾部分にあるようです。 もうひとつ補足としてXBRLデータ表示用のアプリ(パーサ)として、富士通のXWandやXBRLな社長さんが開発したTeCAXやインド製のirisなどがあり、簡易的に財務諸表形式で取り出したいときはこのようなパーサに頼る手もあります。
SugiuraY

2016/12/28 10:07

ご回答有難うございます。 お力添えに深謝を申し上げます。多岐にわたる情報を集約、整理したいのもありますが、DOM操作も勉強したかったので、自分で頑張ってトライしてみます。 改めて、突破口をご教示いただけた事に御礼を申し上げます。
SugiuraY

2017/01/04 04:13

あけましておめでとうございます。 年末年始にかけて、上記のxbrlについて、いろいろ試していたのですが、ちょっと 行き詰まりが生じておりますので、お伺いしたく存じます。EDINETから取得した~.xbrlファイルからDOM(PHP)を利用して必要な情報を取得しようと思ったのですが、1点か分からない点がございます。 金融庁のタクソノミを見ていて対応する英文勘定科目(標準ラベル)を.xbrlのなかに探しているのですが、検索しても出てきません。例えば仰るCurrentAssetsは.xbrlファイル上存在しませんでした。私が取得してくるファイルに誤りがあるのでしょうか?と申し上げても実際にzipで落としてきた場合、.xbrlがpublicフォルダの中に一つしかないので、これ以外には考えづらいのですが。 また、もしDOMでxbrlファイルを操作することを基礎から学べるサイトや書籍等があればご教示願えますか? 何卒、宜しくお願い申し上げます。
guest

0

ファイルそのものからは抽出ができませんでした。ファイルの種類の問題なのでしょうか

???
私はあなたが示したHTMLを「sample.xbrl」というファイル名で保存してテストし、正常に動作しましたよ。

実際には「sample.xbrl」の中身はもっと大きいのですか?
それならその「sample.xbrl」自体をアップするか、中身を全部(サイズが大きすぎるなら一部でもいいからもうちょっと長い範囲で)投稿してください。

また、motuoさんの指摘した通り、全ての文字コードが統一されているかをチェックしたほうがいいですね。
sample.xbrlとphpファイル自体のエンコーディングが「utf-8」になっているかどうかを確認し、さらにphpスクリプトの先頭(開始タグの次の行)に

php

1mb_language("ja"); 2mb_internal_encoding("UTF-8");

を入れてみてください。

投稿2016/12/27 06:45

編集2016/12/27 06:51
zico_teratail

総合スコア907

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

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

SugiuraY

2016/12/27 08:16

ご返信有難うございます。 ・全てUTF-8で統一されていることは確認ができました。 ・ファイルはかなり長いものになります。これを貼り付けるにはあまりにも大きいので 入手手段を開示させて頂きます。反対にお手数をおかけしてまことに申し訳ございません。 例えばですが ①EDINET https://disclosure.edinet-fsa.go.jp/E01EW/BLMainController.jsp?uji.verb=W1E63010CXW1E6A010DSPSch&uji.bean=ee.bean.parent.EECommonSearchBean&TID=W1E63011&PID=W1E63010&SESSIONKEY=1482826248664&lgKbn=2&pkbn=0&skbn=0&dskb=&dflg=0&iflg=&preId=1&row=100&idx=0&syoruiKanriNo=&mul=%E3%83%97%E3%83%AD%E3%83%AD%E3%82%B8%E3%82%B9&fls=on&cal=1&era=H&yer=&mon=&pfs=4 ②これのH28.08.30 15:00にアップされているxbrlファイルをクリック ③zipが解凍されるので以下が対象ファイルになります。 jpsps070300-asr-001_G09054-000_2016-05-31_01_2016-08-30.xbrl 何卒、宜しくお願い申しあげます。
SugiuraY

2016/12/27 08:28

大変申し訳ございません、正規表現として抽出するPatternをHTMLのコードではなくブラウザ上の表示で実行しておりました、、 重ねてお詫び申し上げえます。
zico_teratail

2016/12/27 09:54

mb_language("ja"); mb_internal_encoding("UTF-8"); 上記二行を追記してのテストはしてみましたか? 回答者たちの提案に対しては全ての項目を試してみて、それでも上手くいかなければ「何がどうダメだったのか」を逐一書いていただかないと、次のアドバイスのしようがありません。
zico_teratail

2016/12/27 12:22

最終的にどういう結果を得たいのかイマイチ意図がよくわかりませんが、下記でいいのでは? <?php $html=file_get_contents("jpsps070300-asr-001_G09054-000_2016-05-31_01_2016-08-30.xbrl"); preg_match_all('!font-family: &amp;apos;MS Mincho&amp;apos;; font-size: 12px"&gt;(.+?)&lt;/span&gt;!s', $html, $matches); echo "<pre>"; print_r($matches); echo"</pre>";
guest

0

ベストアンサー

提示されているソースをそのままテストしてみたら、正常に動作しましたよ。

Array
(
[0] => Array
(
[0] => font-size: 12px">流動資産

)

[1] => Array
(
[0] => 流動資産

)

)

投稿2016/12/27 04:42

編集2016/12/27 04:44
zico_teratail

総合スコア907

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

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

SugiuraY

2016/12/27 05:29

すみません、一点見落としがあり、上記のHTMLでは抽出できましたが、ファイルそのものからは抽出ができませんでした。ファイルの種類の問題なのでしょうか。。このサイトで対象ファイルを添付することは可能なのでしょうか?実際には世の中に公開されているファイルでget_file_contentsせずに、sample.xbrlそのものを取得することはできるのですが、、、
SugiuraY

2016/12/27 05:30

すみません、まずご回答に御礼を差し上げることを失念を致しました。 改めまして、ご回答を頂き、有難うございます。
guest

0

var_dump($get)等で$getの内容を確認してみては如何でしょうか?もしかしたら、意図しない文字列が入っていたりしませんか?

投稿2016/12/27 04:41

motuo

総合スコア3027

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

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

SugiuraY

2016/12/27 05:34

ご回答頂き、有難うございます。 上記抜粋の場合は抽出ができましたが、対象ファイル全体から取得した場合、うまく取得ができません。。ファイルの種類の問題なのかなぞです。HTMLでなくても文字列であれば、どんなものでも正規表現に当てはめて抽出できると理解していたのですが、
motuo

2016/12/27 05:42

file_get_contentsの結果、'流動資産'が文字化けしていたりしませんか? 例えば、UTF-8で確認してみては如何でしょうか? (例)mb_convert_encoding('sample.xbrl', 'utf8')
SugiuraY

2016/12/27 08:17

ご返信ありがとうございます。特に文字化けもしておらず、文字コードも全てUTF-8で統一されていることを確認しました。念のためにencodingもしてみましたが、、だめでした。
SugiuraY

2016/12/27 08:28

大変申し訳ございません、正規表現として抽出するPatternをHTMLのコードではなくブラウザ上の表示で実行しておりました、、 重ねてお詫び申し上げえます。
motuo

2016/12/27 08:41

ダウンロードしてみてみたのですが、'<'等がエスケープされていませんか? &lt;span style="font-family: &amp;apos;MS Mincho&amp;apos;; font-size: 12px"&gt;流動資産&lt;/span&gt; これに合わせて正規表現を組んだら変わったりしませんか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問