• ベストアンサー

phpからxmlの上書き

質問よろしくお願いします。 php5を使っています。 すでに置いてあるxmlをphpで上書きしたいのですがやり方がわかりません。 <?xml version="1.0"?> <cars> <car> <maker>TOYOTA</maker> </car> </cars> に書き込むと <?xml version="1.0"?> <cars> <car> <maker>TOYOTA</maker> </car> <car> <maker>NISSAN</maker> </car> </cars> となるようにしたいです。 どなたか分かる方教えてください。

  • jsqrm
  • お礼率45% (16/35)
  • PHP
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
  • exists
  • ベストアンサー率62% (27/43)
回答No.2

こんにちは、とっても簡単なやり方 やってることは、tyo.xmlを読み込んで、</cars>というxmlエレメントを、新しい文字列に、置換することで、追加しています。 どう? 簡単でしょ。 <?php /* * xmlに追加しちゃうぞ *------------------------------*/ $xml_path = "tyo.xml"; $xml = file_get_contents( $xml_path ); $replace_key = "</cars>"; $add_xml = "<car>\n<maker>NISSAN</maker>\n</car>\n".$replace_key; $result = str_replace($replace_key,$add_xml,$xml); file_put_contents( $xml_path , $result ); ?>

jsqrm
質問者

お礼

回答ありがとうございます。 existsさん、できました!しかも頂いたソースをいじっている内にPHPの勉強にもなりました。本当にありがとうございます!!

その他の回答 (1)

  • inu2
  • ベストアンサー率33% (1229/3720)
回答No.1

Smartyなどのようなテンプレートエンジンを使うってのはどうでしょ? ------------car.xml <?xml version="1.0"?> {foreach from=$cars item=car} <cars> <car> <maker>{$car.maker}</maker> </car> </cars> {/foreach} ----------------- PHP側 //dummy data $cars['car'][] = array('maker'->'TOYOTA'); $cars['car'][] = array('maker'->'NISSAN'); $smarty = new Smarty(); $smarty->assign( 'cars',$cars ); $smarty->display('car.xml');//画面へ表示します または $xml = $smarty->fetch('car.xml');//画面へは出力せず、出力データ(この場合は完成したXML)を返します //出来上がった$xmlをあとは、煮るなり焼くなりご自由に・・・ 脊髄反射的に書いたので文法が間違ってるかもしれませんSmartyの詳しい使い方は http://www.smarty.net/manual/ja/api.fetch.php ここ読んでくささい もちろん、他のテンプレートエンジンをつかってもかまいませんよ

jsqrm
質問者

お礼

回答ありがとうございます! PHPをはじめたばかりなのでテンプレートエンジンを使うやり方というのははじめて知りました! そしてわざわざサイトのアドレスまで載せていただいて本当にありがとうございます!! このサイトを見て勉強させていただきます。

関連するQ&A

  • php4でのxml上書き

    はじめまして、phpでxmlの上書きをしたいのですが、 phpは <?php $xml_path = "gundam.xml"; $xml = file_get_contents( $xml_path ); $replace_key = "</robot>"; $add_xml = "<gundam>\n<pilot>シーブック</pilot>\n<mobilesuits>ガンダムF91</mobilesuits>\n</gundam>\n".$replace_key; $result = str_replace($replace_key,$add_xml,$xml); $fp = fopen($xml_path,"w+"); flock($fp, LOCK_EX); fwrite($fp,$result); fclose($fp); ?> xmlは <?xml version="1.0" encoding="Shift_JIS"?> <robot> <gundam> <pilot>アムロ</pilot> <mobilesuits>ガンダム</mobilesuits> </gundam> <gundam> <pilot>カミーユ</pilot> <mobilesuits>Zガンダム</mobilesuits> </gundam> <gundam> <pilot>ジュドー</pilot> <mobilesuits>ガンダムZZ</mobilesuits> </gundam> <gundam> <pilot>コウ</pilot> <mobilesuits>ガンダムGP01</mobilesuits> </gundam> <gundam> <pilot>クリス</pilot> <mobilesuits>ガンダムアレックス</mobilesuits> </gundam> </robot> と書いてあります。 最後にxmlを書き換えた部分を $fp = fopen($xml_path,"w+"); flock($fp, LOCK_EX); fwrite($fp,$result); fclose($fp); で上書きしたいのですができません。 何が問題なのでしょうか?

    • ベストアンサー
    • PHP
  • XMLのHTMLへの変換 (初心者)

    例えば、以下のようなsample.xmlをWebブラウザで表示する為には どのようにするればよろしいのでしょうか。どなたか教えてください。  <?xml version="1.0" encoding="Shift_JIS" ?> - <cars> - <car> <name>乗用車</name> <price>150</price>  </car> </cars>

    • ベストアンサー
    • XML
  • phpでxmlが動かない macOsXLion

    phpでxmlの練習をしてるんですが全く動作しません。なんででしょうか? コードを次に書きます。 <?php $doc = new DOMDocument; // DOMDocumentのインスタンス生成 $root = $doc->createElement("cars");  // root要素を作成する $doc->appendChild($root); // docの子としてrootを追加する $elm1 = $doc->createElement("car"); // car要素を作成する $root->appendChild($elm1); // car要素をrootの子として追加する $txt1 = $doc->createTextNode("スポーツカー"); // テキストノードを作成する $elm1->appendChild($txt1); // テキストノードをテキスト要素としてelm1の子として追加する $elm2 = $doc->createElement("car"); // car要素を作成する $root->appendChild($elm2); // rootの子としてcar要素を追加する $txt2 = $doc->createTextNode("トラック"); // テキストノードを作成する $elm2->appendChild(txt2); // elm2にtxt2を追加する print $doc->saveXML(); ?> よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHPで、xmlを書き換えたい

    PHP初心者です。 年月日を記録してあるxmlを、phpから書き換えたいのですが、 動作しなくて困っています。。 現在の年月日は 2011.4.7 で 書き換え後の年月日は 2100.9.9 にしたいです。 「index.html」と「memory.xml」が同じフォルダ内にあります。 ●memory.xmlの内容は以下のとおりです-------------------- <?xml version="1.0"?> <memory>   <year>2011</year>   <month>4</month>   <day>7</day> </memory> ●htmlに以下のphpコードを書きました-------------------- <?php   $memoryFile = 'memory.xml';   if ( $xml = simplexml_load_file ( $memoryFile ) ) {     function changeMemory ( $year, $month, $day ) {       $xml -> year = $year; //年の書き換え       $xml -> month = $month; //月の書き換え       $xml -> day = $day; //日の書き換え       $xml -> asXML ( $memoryFile ); //ファイルに書き出す     }     changeMemory ( 2100 , 9 , 9 );   } ?> どうも、以下の1文が作動してくれない気がします。。 $xml -> asXML($memoryFile); //ファイルに書き出す どなたか原因がわかる方いらっしゃいましたら、 なにとぞご教授よろしくお願いいたします。。

    • ベストアンサー
    • PHP
  • PHPでxmlファイルへのデータの上書き方法

    混乱してしまっています。初心者です。 前回もPHPでの上書き方法をご教授いただいたのにごめんなさい。 PHPを使って、RSSを更新していくフォームを作成しております。 「入力した内容をPOSTでうけとって、xmlファイルにwで書き込む」 としましたら、最新の項目はでますが、履歴がきえます。もちろんです。 RSSでタグを書いていくとき更新情報は<item></item>にはいりますが、 その上にも下にもスクリプトがありますよね。<item></item>だけかきこんでいくというというのは どういった命令をしていけばいいのですか? お昼からずっと考えて、かなりまいっています。 お答えくださる方々にはとるにたらないような初歩的は質問かと存じますが、どうかご教授ください。 よろしくお願いします。 ↓「きえるRSSのなりそこない」 <!doctype html> <html> <head> <meta charset="jis" > <title>RSS登録</title> <body> <?php $title=$_POST["title"]; $text=$_POST["text"]; $url=$_POST["url"]; $rss=' <?xml version="1.0"?> <rss version="2.0"> <channel> <title>●●●</title> <link>●●.com</link> <description>最新の●●です</description> <lastBuildDate>Tue, 30 Jul 2013 22:32:44+0900</lastBuildDate> <item><title>'.$title.'</title><link>'.$url.'</link><description>'.$text.'</description></item> </channel> </rss> '; $f=fopen("rss.xml","w"); fputs($f,$rss); fclose($f); ?> </body> </html>

    • ベストアンサー
    • PHP
  • PHPでのXML操作について

    お世話になります。 PHPを少し触れる程度の初心者です。 現在PHPで既存のXMLファイルへの書き込み・削除などの編集が出来ないかと方法を探っているのですが、DOMを使うやXpathを使う、他にも色々と書かれていて少々混乱気味です。 PHP5だけで、例えば以下の様な事は可能なのでしょうか? (1) <?xml version='1.0'?> <DataSet>  <Table>   <name>○○○</name>   <auther>×××</auther>  </Table> </DataSet> というXMLファイルがあった場合、 (2) <?xml version='1.0'?> <DataSet>  <Table>   <name>○○○</name>   <auther>×××</auther>  </Table>  <Table>   <name>△△△</name>   <auther>×××</auther>  </Table> </DataSet> という様な追加。 そして再び元の(1)へ戻す様な削除です。 PHPだけでは不可能である場合、一番分かり易く簡単だと思われる方法を、どなたか分かり易くご教授願えないでしょうか? 宜しくお願いします。

    • ベストアンサー
    • PHP
  • phpからxmlへの文字化け

    PHPについての質問です。PHPのバージョンは5です。 FLASH8で作ったスクリプトからPHPに変数を送り、その変数をPHPからXMLに送っています。 しかしPHPからXMLに送ると日本語がちゃんと表示されません。何かPHPの方でしないとまずいのですか? <FLASH> System.useCodepage = true; SendData = new LoadVars(); //送りたいデータを箱に詰める this.btn_mc.onRelease = function() { _root.SendData.pro1 = nam; _root.SendData.pro2 = sbj; _root.SendData.pro3 = mail; _root.SendData.pro4 = product; //データ(中身)を詰めた箱をgetFlash.phpに送信 _root.SendData.sendAndLoad("http://localhost/php/xml_php/xml12.php", _root.SendData); }; <PHP> <?php /*変数を入れる*/ $name = $_POST["pro1"]; $sbj = $_POST["pro2"]; $add = $_POST["pro3"]; $msg = $_POST["pro4"]; /*時間を取得する*/ $stamp = time(); $date = date('Y,m/d(D)', $stamp); /*xmlに追加*/ $xml_path = "test1.xml"; $xml = file_get_contents( $xml_path ); $replace_key = "<article>"; $add_xml = $replace_key."\n<entry name='$name' dat='$date' tit='$sbj' contents='$msg'/>\n"; $result = str_replace($replace_key,$add_xml,$xml); file_put_contents( $xml_path , $result ); ?> <xml> <?xml version="1.0" encoding="utf-8"?> <article> <entry name="ha" dat="2008,03/10(Mon)" tit="test" contents="hogehoge"/> </article> となっています。

    • 締切済み
    • PHP
  • PHPで、XML

    XMLの内容をPHPを使って表示したいのですが どの様にすればいいかがよくわかりません。 インターネットで探して見ても説明が難しかったりで、 よくわかりません。 できれば簡単なサンプルを出して、説明していただけないでしょうか。 表示したいXMLファイルを以下に出しておきます。 <?xml version="1.0" encoding="shift-jis" ?> <member> <list> <name>John</name> <nationality>USA</nationality> </list> <list> <name>Tom</name> <nationality>USA</nationality> </list> </member> テーブルを使って name nationality John USA Tom USA というふうにしたいです。

    • ベストアンサー
    • PHP
  • PHP4でXML

    こんにちは。PHPでXMLファイルを書き換えたいのですが、サーバ環境がPHP5ではありません。以下のようにHTMLと同じ方法でphpファイルを読み込むことは不可能なのでしょうか?だとしたら他に良い方法はありますか?困っています。どなたか助けてください。よろしくお願いします。 <?xml version="1.0" encoding="utf-8"?> <rss version="2.0"> <channel> <title>○○1</title> <link>http://○○</link> <description>ウェブサイトに掲載されている最新の情報を掲載しております。</description> <language>ja</language> <copyright>Copyright (c) 2007 ○○, Inc. All Rights Reserved.</copyright> <pubDate><?php include("../rss/date.php"); ?></pubDate> <item> <title>ニュースリリース</title> <link>http://○○</link> <description><?php include("../rss/news.php"); ?></description> <pubDate><?php include("../rss/date.php"); ?></pubDate> </item> <item> <title>商品一覧ページ</title> <link>http://○○</link> <description><?php include("../rss/prodact.php"); ?></description> <pubDate><?php include("../rss/date.php"); ?></pubDate> </item> <item> <title>沿革</title> <link>http://○○</link> <description><?php include("../rss/corporation.php"); ?></description> <pubDate><?php include("../rss/date.php"); ?></pubDate> </item> </channel> </rss>

    • 締切済み
    • XML
  • PHP4でXMLを取得する方法

    XMLをPHPにて参照したいのですが、 レンタルサーバーがPHP4の為、PearのXML_Unserializerを使用しています。 通常問題なく使用できていたのですが、 http://weather.livedoor.com/forecast/rss/index.xml から取得してみようとした所、<ldWeather:lwws id="*" /> の箇所がどうしても取得出来ません。 print_rにて確認したところ、[ldWeather:lwws]となっているのですが、コロンがある場合はどのように取得したらいいのでしょうか? 以下がコードになります require_once("Unserializer.php"); $add = "http://weather.livedoor.com/forecast/rss/index.xml"; $xmldoc = join("",file($add)); $opt = array ('complexType' => 'object','parseAttributes' => 'true','attribuesArray' => '_attributes'); $xml = new XML_Unserializer($opt); $xml -> unserialize($xmldoc, false); $xml = $xml->getUnserializedData(); mb_convert_encoding($xml, "SJIS","UTF-8"); print_r($xml->channel->item[1]->ldWeather:lwws);←ここが問題箇所 PHPを始めたばかりで説明に不十分な箇所があるかも知れませんが、よろしくお願い致します。 PHPバージョン:PHP Version 4.4.6 XML取得先:Livedoor Weather Web Service 利用目的:勉強の為

    • ベストアンサー
    • PHP