PHPでxmlファイルへのデータの上書き方法

このQ&Aのポイント
  • PHPを使って、RSSを更新していくフォームを作成しております。最新の項目はでますが、履歴がきえます。どういった命令をしていけばいいのですか?
  • RSSでタグを書いていくとき更新情報は<item></item>にはいりますが、その上にも下にもスクリプトがありますよね。どういった命令をしていけばいいのですか?
  • PHPでのxmlファイルへのデータの上書き方法について教えてください。お昼から考えていますが、わからない部分が出てまいりました。ご教授いただけると幸いです。
回答を見る
  • ベストアンサー

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
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
noname#244856
noname#244856
回答No.1

PHPにはSimpleXMLが実装されているのでそれを利用しない手はないでしょう。 エンコーディングはUTF-8を利用し、encoding="UTF-8" をつけるのを忘れないでください。 さすがに「jis」はあり得ないでしょう。 <?php $rss_base = <<<EOD <?xml version="1.0" encoding="UTF-8"?> <rss version="2.0"> <channel> <title>●●●</title> <link>●●.com</link> <description>最新の●●です</description> <lastBuildDate>Tue, 30 Jul 2013 22:32:44+0900</lastBuildDate> </channel> </rss> EOD; $xml = simplexml_load_string($rss_base); $channel = $xml->channel; $item = $channel->addChild('item'); $item->addChild('title', 'タイトル1'); $item->addChild('link', 'リンク1'); $item->addChild('description', '説明1'); $item = $channel->addChild('item'); $item->addChild('title', 'タイトル2'); $item->addChild('link', 'リンク2'); $item->addChild('description', '説明2'); // 普通に表示 // echo $xml->asXML(); // 整形して表示する場合(php_tidy.dllを有効にしておく必要がある) echo tidy_repair_string($xml->asXML(), array( 'input-xml' => true, 'output-xml' => true, 'input-encoding' => 'utf8', 'output-encoding' => 'utf8', 'indent' => true, )); こんな感じで整形されます。 http://puu.sh/3PvBk.png

sheyma
質問者

お礼

おはようございます。 今回もありがとうございました・・・。 尊敬です。 質問投稿したあと、JISはあかんて!!と気づくまでが精いっぱいでした。 今回もphp_tidy.dllは初めましてです。 まだまだPHPのお勉強が必要だと痛感しているのですが、どのようにアプローチしていっていいかなやんでいます。 もしよければこの本いいよ!!というおすすめの入門書がありましたら教えていただけませんか??

その他の回答 (1)

noname#244856
noname#244856
回答No.2

(あんまりブログ記事のせるのはよろしくないけど) こちらでまとめているのでよければご覧ください。 http://bloggdgd.blog28.fc2.com/blog-entry-282.html 「パーフェクトPHP」は超オススメです。 若干著者のコーディング癖が出てるので、「ん??」って思ったところはスルーしてもらって構いません。 【例】 if (isset($_POST['hoge']) === true) { } 私だったら冗長に思うので if (isset($_POST['hoge'])) { } で済ませちゃうかなぁ とか。

sheyma
質問者

お礼

無理なお願いをしてごめんなさい。 でも本当にたすかります。 ご近所さんらしい?ということで甘えてしまいました。 ブログも拝見していきます! ありがとうございました!

関連するQ&A

  • 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
  • RSS Feedの外部ファイル読み込み

    RSS Feedのソースの中に外部ファイルを読み込むことは出来ますでしょうか? 以下のような感じで、RSS Feedのrss.xmlにcontents.xmlをインクルードすることは、可能でしょうか。 可能であれば、どのように記述すれば良いでしょうか? 分かる方、よろしくお願い致します。 rss.xml----------------------------------------------------------- <?xml version="1.0" encoding="UTF-8" ?> <rss version="2.0" xml:lang="ja"> <channel> <title>RSSのタイトル</title> <link>http://~</link> <description>RSSの説明</description> <language>ja</language> <copyright>RSSのコピーライト</copyright> <lastBuildDate>日付</lastBuildDate> <item> <title>タイトル1</title> <link>http://~</link> <description>タイトル1の説明</description> <category>タイトル1のカテゴリ</category> <pubDate>タイトル2の日付</pubDate> </item> ここに「contents.xml」の内容を読み込みたい </channel> </rss> ------------------------------------------------------------------ contents.xml------------------------------------------------------ <?xml version="1.0" encoding="UTF-8" ?> <item> <title>タイトル2</title> <link>http://~</link> <description>タイトル2の説明</description> <category>タイトル2のカテゴリ</category> <pubDate>タイトル2の日付</pubDate> </item> ------------------------------------------------------------------

    • ベストアンサー
    • XML
  • XMLのエラー

    XMLのエラー RSS作りの勉強のため、XMLを作成していったんローカルフォルダに保存したあと、IE8でテスト表示してみたるとこんなエラーが出ます。↓↓ XML ページを表示できません XSL スタイル シートを使用した XML 入力は表示できません。エラーを訂正してください。 [更新] ボタンをクリックするか、または後でやり直してください。 -------------------------------------------------------------------------------- テキストの内容に無効な文字が見つかりました。リソース 'file:///(ファイルの保存場所)' の実行エラーです。 XMLの文は下です。 <?xml version="1.0" encoding="utf-8" ?> <rss version="2.0"> <channel>   <title>RSS2.0 Test</title>   <link>(適当なリンク先)</link>   <description>RSS2.0のテスト</description>   <language>ja</language>   <item>    <title>ページ1</title>    <link>(適当なリンク先)</link>    <description>1つ目のページ</description>    <pubDate>Mon, 20 Jul 2010 00:00:00 +0900</pubDate>   </item>   <item>    <title>ページ2</title>    <link>(適当なリンク先)</link>    <description>2つ目のページ</description>    <pubDate>Tue, 21 Jul 2010 03:04:05 +0900</pubDate>   </item> </channel> </rss> よろしくお願いします。

    • ベストアンサー
    • XML
  • XMLデータを動的に使用する

    XML初心者です。 お恥ずかしながらかなり幼稚な質問かもしれませんが宜しくお願いします。 XMLファイルがひとつあります。 ----ファイルの中身---- <?xml version="1.0" encoding="utf-8"?> <?xml-stylesheet type="text/xsl" href="相対パス/fff.xsl"?> <rss version="2.0"> <channel> <item> <title>お中元の季節になりました。</title> <link>https://XXXX/XXXXX</link> <pubDate>2007/07/05</pubDate> <description>お中元の季節になりました。デパートが賑わいをみせています。</description> <category>浅目新聞</category> </item> <item> <title>今年は平年並みの暑さ</title> <link>https://XXXX/XXXXX</link> <pubDate>2007/07/05</pubDate> <description>気象庁が今年は平年並みの暑さになると発表しました。</description> <category>毎回新聞</category> </item> </channel> </rss> XSLファイルがあります。 ----ファイルの中身---- <?xml version="1.0" encoding="Shift_JIS"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <head> <title>新聞情報表示テスト</title> </head> <body> <p align="center">表示テスト</p> <xsl:apply-templates /> </body> </html> </xsl:template> <xsl:template match="item"> <table border="0" width="500" align="center"> <xsl:if test="title='お中元の季節になりました。'"> <tr> <td colspan="2">URL: <xsl:value-of select="link" /></td> </tr> </xsl:if> </table> </xsl:template> </xsl:stylesheet> このXSLファイルについて、"お中元"の部分を動的に変えたいのですが、可能でしょうか? できればjavascriptは使いたくありません。(javascriptを無効にしているユーザーがいるため) インプットボックスが用意してあり、そこにユーザーが"今年は平年並みの暑さ"と入力すれば、そちらのlinkを引っ張ってきたいのです。 かなり抽象的な質問になってしまい、みなさんに意図を汲み取って頂かなければなりませんが、困っていますので宜しくお願いします。

    • ベストアンサー
    • XML
  • PHPパーサー MagpieRSSについて

    PHPパーサーのMagpieRSSを使用しています。 読み込むxmlが更新されてもそれが反映されません。 また、htmlとして書き出す際に<p>タグにid名を付けたいのですが、idをつけるとエラーがでます。これはPHPでは文法的にまずいんでしょうか?下記が使用しているソースです。 重ねて質問なんですが、下記のソースでは1つのxmlしか読み込んでいませんが、複数のxmlを読み込むにはどうしたらいいのでしょうか。 よろしくお願いします。 <?php require_once 'rss_fetch.inc'; require_once 'rss_utils.inc'; $url = 'http://www.xxxxx/xxxxxx/index.xml'; $rss = fetch_rss($url); $title = $rss->channel['title']; $title = mb_convert_encoding($title, "UTF-8", "auto"); $rss->items = array_slice($rss->items, 0, 1); foreach ($rss->items as $item ) { $description = $item[description]; $description = mb_convert_encoding($description, "UTF-8", "auto"); $url = $item[link]; $date = date("Y.m.d", $item['date_timestamp']); echo "$description?n"; } ?>

    • ベストアンサー
    • PHP
  • PHP変数にXMLのタグ内容を代入するには?

    ■質問内容: 超初心者です。質問が的外れかもしれませんが自己解決できずにいます。何卒ご教授ください。 達成したい内容としてRSS生成をPHPで作成中です。 PHPの $hensu1 = 別ファイルXMLにある<namae>名前</namae>の"名前" を代入したいのですが記述方法が解らず、困っております。 そのほかの質問もありますが、後述します。 ■環境: php:4.3.** (ホスティングの為、サーバの設定変更などできません) ■状況と経緯: 実際のコードを乗せます。 直接ご指摘いただけると、大変ありがたいです。 【rss.php】 <?php echo '<?xml version="1.0" encoding="UTF-8"?>'; ?> <? $hensu1 = "(1)別ファイルXMLにある<namae>名前</namae>の"名前" を代入したい"; $hensu2 = "(2)別ファイルXMLにある<nedan>100円</nedan>の"100円" を代入したい"; $pubjikan ="(3)別ファイルXMLにある<jikan>2009/02/26-17:50</jikan>の"2009/02/26-17:50"を代入したい" ?> <rss version="2.0"> <channel> <title >タイトル</title> <link>http://local/</link> <description>webページ</description> <language>ja</language> <copyright>会社</copyright> <managingEditor></managingEditor> <webMaster></webMaster> <pubDate>Thu, 26 Feb 2009 00:00:00 +0900</pubDate> <lastBuildDate></lastBuildDate> <item> <title>タイトルは<? echo "[ {$hensu1} ]"; ?>です</title> <link>books.xml</link> <description>価格は<? echo "[ {$hensu2} ]"; ?>です</description> <pubDate><? echo $pubjikan; ?></pubDate> ←(4)ここは日付を成型するPHPを記述したいの </item> ~(5)ここに、XMLから繰り返し取得したい(最大5件程度)~ </channel> </rss> --- 【books.xml】 <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="table.xsl"?> <books xml:space="default"> <book no="000">  <namae>名前</namae> <nedan>100円</nedan> <jikan>2009/02/26-17:50</jikan> </book> <book no="000"> ←(5)に該当。以降を繰り返し5件程度取得したい。 <namae>名前2</namae> <nedan>200円</nedan> <jikan>2009/02/25-19:30</jikan> ~ ~繰り返し数十件のデータあり ~ </book> </books> --以上-- 上記の(1)~(5)について教えてください。 出来れば具体的な記述でご指摘いただけるか参考サイトをご紹介 下さるとありがたいです。 Domxmlなど自分なりに見当つけてみましたが、上手くいきませんでした。 何卒、宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • PHPを使ったDOMの操作で兄弟ノードへ移動する方法が分からない。

    PHPを使ったDOMの操作でxml文書から要素を抽出したいのですが、兄弟ノードへの移動の仕方が分かりません。 <?xml version="1.0" encoding="UTF-8" ?> <rss version="2.0"> <channel> <title>○○○</title> <link>×××</link> <item> <title>更新2つ目</title> <link>http://www.~~/02/</link> <description> <p>文書2</p> </description> <category>エッセイ</category> </item> <item> <title>更新1つ目</title> <link>http://www.~~/01/</link> <description> <p>文書1</p> </description> <category>エッセイ</category> </item> </channel> </rss> 例えば、以上のような場合、後々<item>を更に現在ある一番上の<item>の上に追加していくことを考えて、現在(上)の<item>の部分から直に次(下)の<item>へカレントノードを移動させることは可能でしょうか?参考書を読みながら現在(上)の<item>から<link>要素は取り出せたのですが、「次(下)にくる<item>の<link>をとりだす」方法が、最上位のルート要素を経由し、そこから何個目の<link>か数えてから取り出す方法しか分かりません。それでは後に(<link>を内包した)<item>を追加することを考えると、順番が変わってきてしまうので、参照したい<link>が変わってしまう事になります。 検索して調べようと思ったのですが、PHPによるDOMの操作の情報が見つかりませんでした。やり方を知っている方がいれば教えて欲しいです。また、PHPによるDOMの操作について詳しく載っているサイトや書籍(「PHP5&XMLによるWebサービス構築」は持っています)もあれば教えてください。よろしくお願いします。

    • ベストアンサー
    • XML
  • PHPでRSSから要素を取得する方法について

    PHPでRSSから要素を取得する方法について 下記のrss情報から「lddata:syousai」にあるA,B,Cの各""内の情報をphpで変数に 格納しようと思っていますがどうしてもうまく行きません。 このような形式の場合、どのようにして取得したら良いのか お知恵を貸していただけないでしょうか。 PHPを勉強し始めたばかりなので恥ずかしい質問内容になっているかも知れませんが 何卒よろしくお願いいたします。 ▼XML 詳細 ・rssの場所 http://test.com/forecast/rss/test.xml ・rssの内容 <?xml version="1.0" encoding="UTF-8" ?> - <rss version="2.0" xmlns:lddata="http://test.com/ns/rss/2.0"> - <channel> <title>test</title> <link>http://test.com</link> - <item> <title>情報タイトル</title> <link>http://test.com/jyoho/2010-05-15-18-24.html?r=?rss</link> <lddata:syousai A="東京都" B="9" C="日付データ" />   ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄  ↑変数に格納したい場所 </item> </channel> </rss>

    • ベストアンサー
    • PHP
  • MagpieRSSを使用して自分のHPにxmlを表示させる方法

    お世話になります。 データベースよりxmlを生成し、自分のHPに1ページに埋め込みたいと思っています。 いろいろなサイトを参考に、MagpieRSSを使用して表示させたいのですが、コードのサンプルに記載されている他サイトのRSS・xmlは表示できるのですが、ローカルのxmlは下記のエラーが出てしまい表示できません。 Warning: MagpieRSS: Failed to parse RSS file. (not well-formed (invalid token) at line 9, column 21) in /aaa/rss/rss_fetch.inc on line 238 変更した部分は、表示するxmlのURLのみです。 使用しているphpのバージョンは4.34、MagpieRSSのバージョンは0.72です。 問題のrss.phpのソース↓ <?php require_once 'rss_fetch.inc'; define('MAGPIE_OUTPUT_ENCODING', 'UTF-8'); $url = 'http://www.aaa.com/rss.xml'; $rss = fetch_rss($url); if ($rss && !$rss->ERROR) { drawRSS($rss); }else{ echo "取得できませんでした。"; } function drawRSS($rss){ $items = array_slice($rss->items, 0, 10); echo "<ul>\n"; foreach ($items as $item ) { $title = $item[title]; $title = mb_convert_encoding($title, "UTF-8", "auto"); $url = $item[link]; $description = $item[description]; $description = mb_convert_encoding($description, "UTF-8", "auto"); echo "<li><a href=\"$url\">$title</a></li>\n$description"; } echo "</ul>\n"; } ?> 何か、対処方法をご存知の方教えてください。 よろしくお願いいたします。

    • ベストアンサー
    • XML
  • 動的なPHPを静的なhtmlページに変換したい

    動的なPHPページ(RSS)を静的なhtmlのページとして、変換したいのですが、どのようにしたら良いでしょうか? 書いたPHPは下記のようなモノです。 <?php error_reporting(E_ERROR); require_once 'rss_fetch.inc'; define('MAGPIE_OUTPUT_ENCODING', 'UTF-8'); $url = 'http://b.hatena.ne.jp/entrylist?mode=rss&url=http%3A%2F%2Fwww.lucky-bag.com'; $rss = fetch_rss($url); $title = $rss->channel['title']; $title = mb_convert_encoding($title, "EUC-JP", "auto"); echo "<h3>$title</h3>\n"; echo "<dl>\n"; foreach ($rss->items as $item ) { $title = htmlspecialchars($item['title']); $title = mb_convert_encoding($title, "EUC-JP", "auto"); $description = htmlspecialchars($item['description']); $url = htmlspecialchars($item['link']); echo "<dt><a href=\"$url\">$title</a></dt>\n"; $description = mb_convert_encoding($description, "EUC-JP", "auto"); echo "<dd>$description</dd>\n"; } echo "</dl>\n"; ?> どうぞよろしくお願いいたします。

    • 締切済み
    • PHP

専門家に質問してみよう