XMLファイルからの条件付抽出

このQ&Aのポイント
  • PHP初心者のためのXMLファイルからの条件付抽出の方法と指針について
  • PHPを使用してWEBサイトで最新の情報を表示する方法について解説します
  • XMLファイルから特定の条件を抽出し、表示する方法をPHP4.3.10環境で説明します
回答を見る
  • ベストアンサー

XMLファイルからの条件付抽出

初めまして。 私はPHPの初心者なのですが、あるスクリプトを組むことになり、どうしてよいかわからずこちらに質問させていただきます。 スクリプトの内容としては あるWEBサイトにて、最新の情報を表示させるというものです。 『最新の情報』というものがディレクトリ./TESTに対しXMLファイルとして配信されます。 ところが厄介なことにこのファイルは『表示すべき情報以外』の場合も有ります。 表示させるべきか表示させないかのKeyはこのファイルの全てを読み込み、タグ<test></test>というタグに囲まれた文字列がkeywordになります。もしマッチした文字列がある場合はこのtestタグ要素と同じツリー上にある要素・属性部分を抜き出して表示させるということになります。 あと、keywordが送られてきたファイル内に無い場合は echo "現在情報はありません";と入れたく思っております。 サーバー環境はPHP4.3.10です。 DOMはサーバーの仕様で使用できないです。 指針や流れ等でも結構ですので、情報があればお願いいたします。

  • PHP
  • 回答数1
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
  • studio_0
  • ベストアンサー率50% (5/10)
回答No.1

XML Parserのたぐいがなかった頃にXMLやHTMLの特定の要素と属性を書き換えるときに行った方法を少しアレンジして書きます。 XMLファイル全体を文字列として扱い、要素の抜き出し、他の属性部分を抜き出すなどの処理をすべて独自に実装するようにします。 ツリーの深さを覚えておく変数(levelとします)を0で初期化し、XMLファイルをテキストとして読み込み、1文字ずつ先頭から見ていきます。<...>(...はタグ)が来たら、levelを1増やし、</...>がきたらlevelを1減らすというやり方で深さをチェックしながら、<test>を探します。 <test>が来たら囲まれた文字列を取得し、マッチした文字列か調べます。マッチした文字列だったら、再度、先頭から探索し、今度は<test>と同じlevelの要素が来たときに、必要な抜き出し処理などを行います。 抜き出す処理は<>で囲まれた中を文字列として取り出し、スペースなどを元に、タグ名、属性名、属性に分けていきます。

関連するQ&A

  • xmlファイルが生成されない

    <?php //DomDocumentを呼び出す $dom = new DomDocument('1.0','UTF-8'); //要素ノード[document]を追加 $document = $dom->appendChild($dom->createElement('document')); //新しい要素をdocumentの子要素として挿入する $document->appendChild($dom->createElement('name','名前です')); $document->appendChild($dom->createElement('text','テキストです。')); //字下げや空白を考慮してきれいに整形した出力を行う $dom->formatOutput = true; //同階層にtest.xmlとして保存 $dom->save('test.xml'); //出力 echo $dom->saveXML(); ?> のように、同じディレクトリ内にXMLファイルを生成するphpプログラムを作成してみたのですが、 ブラウザからこのPHPファイルにアクセスしてもXMLファイルが作られません。どうすれば良いのでしょうか。 なにかphp,apache等の設定をしてないからでしょうか。 よろしくお願いします。

    • 締切済み
    • PHP
  • DOMでXML操作

    PHP5でDOMを操作しXMLのタグ情報などを得たいのですがプログラムが動かないので質問させていただきました。 //test.php <?php $doc = new DomDocument; $doc->validateOnParse = true; $doc->Load('book.xml'); echo "ID が books の要素は".$doc->getElementById('books')->tagName . " です。\n"; ?> //book.xml <?xml version="1.0" encoding="shift_JIS"?> <A>   <B id="books">test</B> </A> サンプルプログラムを拾ってきてbooksのtestを取得したいのですがなかなか動きません。実行するとエラー文も何もなく「ID が books の要素は です。 」とだけ表示されます。 環境そのものが整っていないのかも解らないため詳しい方ご教授よろしくお願いします。 現在の環境です。 PHP5 Apache2.0

    • ベストアンサー
    • PHP
  • XMLファイルからタグごとバッファにとりだす方法は?

    こんばんわ。 MS C#2005でXMLファイルをDBに取り込むPGを作っています。 困ったことが発生したのですが、調べるにしてもどこからせめてよいのか見当がつかなくなり、どうにもならなくなってしまいました。 以下に簡単ですが、読み込みしたいXMLを記述します。 <?xml version="1.0" encoding="utf-8"?> <XML情報 version="1.0">   <リスト 番号="1">     <概要>       <表示番号>0123456789</表示番号>       <概要タグ2>xxx</概要タグ2>       <概要タグ3>xxx</概要タグ3>         ・         ・     </概要>     <詳細>       <注文>         <アイテム 品目="○○">○○</アイテム>         <アイテム 品目="□□">□□</アイテム>       </注文>     </詳細>   </リスト> </XML情報> 上記のXMLファイルから「<詳細>~</詳細>」間をタグつきの文字列として取り出し、いったんバッファ上に確保した上でDB(SQL Server2005)へ取り込みしたいのです。 ただし、DBへ取り込む際に「<アイテム>」部分の値を一部変更するので(具体的には「品目」属性の値を手直しする)XML的な取り扱いをしながらバッファ操作する方法を探しています。 問題なのは、XMLファイルから「<詳細>~</詳細>」間をタグつきの文字列として取り出す振る舞いを検索エンジンなどで探すにあたって、どういったキーワードで探したらいいのか皆目見当がつきません。 XMLReaderクラスなどの項目で検索しているのですが、思ったような結果が導き出せないでいます。 もしかすると、XML操作関連クラスでは実現できないのではないかと思い、少々混乱しています。 これだけの情報でこちらの意図していることが理解できましたら、その解決法(検索キーワードだけでもかまいません)をご教授いただければと思います。 補足が必要であればお申し付けください。 よろしくお願いします。

  • Perlで別ファイルから文字列の抽出

    当方、サーバ管理でインフラ系の経験しかなく、今回はperlでスクリプトの作成に挑戦しておりますがなかなか理解できていません。お知恵をお貸しください。 やりたいこと: ある入力を受けたら、別ファイルに照会して特定列の文字列を抽出する。以下に例を示します。 入力が gad の場合(小文字です)、file1を参照する。例では一行目にGAD****があるのでこれに該当することとする。最終的にoffice が出力されるようにしたい。 file1の内容: GAD93911 <test1> office HOA14845 <test2> desk ABC52311 <test3> chair KFI33823 <test4> home よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • php検索文字列のハイライト表示

    phpの検索処理で、検索キーワードにマッチした文字列を強調表示(<strong>)して表示したいのですが、タグ文字の処理でわからないことがあります。 例えば 「<a href="test">tes;t</a>」というデータがあり(現状すべてエスケープして表示)、キーワード「</」で検索したとき、該当文字列に<strong>タグをつけた後にエスケープすると<strong>タグまでエスケープされてしまい、強調表示ができません。検索前にエスケープしてしまうとキーワード「;」で検索した時に全てのタグ文字の後に強調された「;」が表示されてしまいます。 どなたかうまい解決方法があれば教えていただきたいです。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • xml中の特殊文字処理について

    phpを使ってxmlを書き出すプログラムを書いたのですがどうしても解決できなくて困っています。具体的な内容は以下のとおりです。 $url = $root->appendChild($dom->createElement('url')); $text = $dom->createTextNode($T_url); $text = $url->appendChild($text); やりたいことは 変数$T_url に 「&」(本来は小文字です。)が含まれた場合そのままxmlに書いて表示させたいですが書き出したxmlをみると「&amp;」という文字列に置き換えて書き出されるのです。 変数$T_urlの内容そのまま書き出したいですがいい方法があればご教授ください。

    • 締切済み
    • PHP
  • XMLパースエラー

    はじめまして。 HTMLを開発している者です。 APIを駆使して情報を得たいのですが、localhost環境で開発していた時には正常に動作したのに、いざサーバーへアップすると、情報を取得するphpファイルで、 XML パースエラー: 要素が見つかりません。 URL: http://~ 行番号: 1, 列番号: 1: と出るのです。これはやはりサーバー環境によるエラーなのでしょうか? ご回答よろしくお願いいたします。

    • 締切済み
    • XML
  • フォームからPOSTされた値をXMLへ書き込むプログラムなのですが、「

    フォームからPOSTされた値をXMLへ書き込むプログラムなのですが、「あ」を入力するとなにも書き込まれません。 「あ」以外は正常に書き込めるようです。 1日調べてみたのですが、どうしてもわかりません。 教えていただけないでしょうか。 情報が足りないようでしたら出させていただきますのでどうかよろしくお願いします。 $dom = new DomDocument('1.0','utf-8'); $dom->load($FilePath); $data = $dom->documentElement->parentNode->firstChild->appendChild($dom->createElement('data')); $testnode = $data->appendChild($dom->createElement('test')); $testtxt = mb_convert_encoding($_POST['test'],'utf-8','sjis'); $testnode->appendChild($dom->createTextNode($testtxt)); 環境 Windows2008サーバ php5.3.2 IIS7.0

    • ベストアンサー
    • PHP
  • DOMとjavascriptについて

    javascriptとperlを駆使して、動的なホームページを作っています。 javascriptで動的にタグを生成してそれを参照したりするような処理を、書いていくと時々新しく生成したタグを参照できなくなったりします。ここにスクリプトを掲載することは出来ないんですが、ajax通信でサーバーとデータをやり取りし、何度もhtmlを書き換えるホームページを作っています。するとなぜだか新しく生成したタグが参照できなくなったりします。 他にはjqueryのappendメソッドで、タグを文字列として直接書き込んだ場合、タグをタグとして認識してくれないということもありました。 javascriptに原因があるのか、domに原因があるのか、それともテスト用のブラウザに使っているfirefoxの処理の仕方に原因があるのかわかりません。どなたか原因を知っている方がいらしたら是非ご教授ください。

  • 大量の xmlファイルをエクセルに読み込ませたい

    10万以上ある同じ形式の xmlファイル(4KBくらい)から特定のタグだけを取得して、エクセル2007で読み込む方法はありませんか。 ファイル名は規則性(数字が100毎に増える)があるのでスクリプトを書けばうまくいきそうですがファイルが大量にあるためとても時間がかかりそうです。使える言語は PHP ですが、あまり使いこなせていません。PHP でなくても単独で使えるツールなどはあるでしょうか。 環境は win7 と linux です。

    • ベストアンサー
    • XML