xml_parse_into_structでなぜか0が返ります

このQ&Aのポイント
  • 上記のアドレスは、あるプロ野球選手のブログのRSSです(atom形式)。
  • これをxml_parse_into_structを使い、配列構造体に格納しようと考えています。
  • しかし、なぜか返り値は0。配列は当然カラです。
回答を見る
  • ベストアンサー

xml_parse_into_structでなぜか0が返ります

http://iac-npo.de-blog.jp/yamazaki/atom.xml 上記のアドレスは、あるプロ野球選手のブログのRSSです(atom形式)。 これをxml_parse_into_structを使い、配列構造体に格納しようと考えています。 しかし、なぜか返り値は0。配列は当然カラです。 XMLについては文字コードはUTF8ですし、構造もきちんとしているように見えます。 何が原因なのでしょうか? ソースは以下の通りです。 $content=file_get_contents('http://iac-npo.de-blog.jp/yamazaki/atom.xml'); $xml_parser=xml_parser_create(); xml_parse_into_struct($xml_parser,$content,$vals); xml_parser_free($xml_parser);

  • PHP
  • 回答数2
  • ありがとう数4

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

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4847/10258)
回答No.1

その4行をコピーペーストして、var_dump($vals); を追加したらちゃんと表示されました。 たまたまじゃないですか? 再現性があるようなら、$content をファイルに保存するコードを入れて見るとか。

souitirou1
質問者

補足

notnotさん、たびたびありがとうございます。 私も、今やったらちゃんと表示されました。 どうやら一時的なものだったようですね。 お手数おかけしました…。 宜しければもう少しお知恵をお貸し下さい。 http://www.fuji-ta.net/blog/?feed=rss2 このxmlなのですが、これは何度やっても表示できません。 xmlを見ると文字化けや改行コードが混在しているのですが、 それが原因でしょうか?

その他の回答 (1)

  • notnot
  • ベストアンサー率47% (4847/10258)
回答No.2

http://www.fuji-ta.net/blog/?feed=rss2 こちらでは問題なく処理できてます。 PHP 5.3.1 (cli) (built: Nov 20 2009 12:52:06)

souitirou1
質問者

お礼

PHPを5.2から5.3にバージョンアップにすると解決しました。 なるほどバージョンの問題だったみたいですね。 ありがとうございました!

関連するQ&A

  • xml_parse_into_structを使うと、xmlの中のCDATAが消える

    XMLデータを取得するプログラムをPHP5で製作しています。 以下、コーディング ----------------------------------------------------------- $contents = file_get_contents($restURL); $parser = xml_parser_create('UTF-8'); xml_parse_into_struct($parser,$contents,$values); xml_parser_free($parser); ----------------------------------------------------------- file_get_contentsでXMLデータの取得した時点では、例えば  <img><![CDATA[<hogehoge>]]></img> というふうにCDATAが格納されていることは確認できています。 しかし、xml_parse_into_structで配列構造体にXMLデータを格納すると、   [0] => Array ( [tag] => IMG [type] => complete [level] => 4 [value] => ) という感じに、"value"の中の値が空になってしまいます。 xml_parse_into_structで"CDATA"が消えずに配列構造体される方法、 または、xml_parse_into_struct以外で"CDATA"が消えずに配列構造体に 設定される手法はありますでしょうか。

    • ベストアンサー
    • PHP
  • RSSデータの読み込み方を教えてください!

    よろしくお願いします...m(_ _)m YahooブログのRSSは、 <?php $xml=simplexml_load_file($yahoo_adrs); for($i=0;$i<=20;$i++){ $title=$xml->channel->item[$i]->title; $title=mb_convert_encoding($title,'SJIS','UTF-8'); } ?> で、タイトル取得が出来ますが、 goo、biglobeブログのRSSは、この方法でも読み込んでくれません。 今は、下記のようなコードで読み込んでます。 $fp=fopen($goo_adrs,'r'); $result=stream_get_contents($fp); fclose($fp); $parser=xml_parser_create('UTF-8'); xml_parse_into_struct($parser,$result,$value,$index); foreach($value as $a){ foreach($a as $b =>$keyb){ if($b=="tag"){ $sw=0; } if($b=="tag" AND $keyb=="TITLE"){ $sw=1; } if($sw==1 AND $b=="value"){ $title=$keyb; } } } この方法は、取りこぼしがある為、 20件のデータが10件だったり15件だったりして不便です。 simplexmlのような方式で、サクッと全部取得できて、 簡単な方法はないでしょうか? ajaxは勉強を始めたばかりで、使えません。 PHPで何とか処理したいと考えてます。 ご指導、よろしくお願いします。 m(_ _)m 現在、下記のブログで利用しています。 http://maybis.sitemix.jp/blog/

    • ベストアンサー
    • PHP
  • ブログのデザインについて

    ライブドアブログを使っています。 TOPページ上のデザインを選ぶことができますが、自分のJPEGファイルなどを設定することはできないのでしょうか? 例えばhttp://blog.livedoor.jp/sod/ では書き始めが <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=euc-jp" /> <link rel="stylesheet" href="http://blog.livedoor.jp/sod/site.css" type="text/css" /> <link rel="alternate" type="application/rss+xml" title="RSS" href="http://blog.livedoor.jp/sod/index.rdf" /> <link rel="alternate" type="application/atom+xml" title="Atom" href="http://blog.livedoor.jp/sod/atom.xml" /> <title>ケ筝カ、ャ、ハ、・ヨ・愠ー クラ、ホタシ - SOD</title> </head> <body> <!-- HEADER --> のようになっているのですが、この<!-- HEADER --> より上の部分をいじれば独自のデザインを設定できるのでしょうか? タグのことなどよく分からない初心者ですので書き方など詳しく教えていただけたら幸いです。 よろしくお願いします。

  • MySQL INSERT into

    いつも大変お世話になり誠にありがとうございます。 標記の件。 $_postで取ってきたデータがMySQLに挿入できません。 どう直せばいいでしょうか? エラーメッセージは Parse error: syntax error, unexpected variable "$stmt" in C:\xampp\htdocs\kanryou.php on line 12 blog_create.php <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Blog</title> </head> <body> <?php $name = $_POST["name"]; $title = $_POST["title"]; $category = $_POST["category"]; $content = nl2br($_POST["content"]); echo "ペンネーム{$name}"; echo "ブログタイトル{$title}"; echo "カテゴリー {$category}"; echo "本文 {$content}"; ?> <hr> <br> <form action="/kanryou.php" method="post"> <input type="hidden" name="id" value="<?php echo $id; ?>"> <input type="hidden" name="name" value="<?php echo $name; ?>"> <input type="hidden" name="title" value="<?php echo $title; ?>"> <input type="hidden" name="category" value="<?php echo $category; ?>"> <input type="hidden" name="content" value="<?php echo $content; ?>"> <input type="hidden" name="post_at" value="<?php echo $post_at; ?>"> <input type="submit" value="送信する"> </form> </main> </body> kanryou.php <?php require_once(blog_create.php); try{ $db = new PDO('mysql:dbname=blog_app;host=localhost;charset=utf8','root'); $sql ="INSERT into blog (id,name,title ,category ,content ,post_at)"; ('$_POST["id"],$_POST["name"],$_POST["title"],$_POST["category"],$_POST["content"],$_POST["post_at"]'){ $stmt =$pdo->prepare($sql) $stmt->execute(); echo 'DB接続エラー' . $e->getMessage(); } echo "送信完了です。ありがとうございました。";?> 以上です。 度々申し訳ございません。 どうか教えてください。 宜しくお願い申し上げます。

    • ベストアンサー
    • MySQL
  • 「認証情報をヘッダに挿入したGETリクエストを送信

    表題のとおり「GETリクエストのヘッダにX-WSSE認証を追加して送出する」方法がわからず困っています。 なぜそれをやりたいかと申しますと ライブドアブログに投稿するのに、XML::Atomを使った方法はわかったのですが、 XML::Atomを使わないでやるにはどうしたらいいのかとおもい試しています。 http://www.witha.jp/Atom/Chapter-3_The_Atom_Publishing_Protocol_or_AtomAPI.html#Atom3-4-3 によりますと、 ---- エンドポイントのhttp://cms.blog.livedoor.com/atomに認証情報をヘッダに挿入したGETリクエストを送信します.  生のHTTP通信は以下のようになります. リクエスト: GET http://cms.blog.livedoor.com/atom HTTP/1.1 X-WSSE: UsernameToken Username="***", PasswordDigest="eNSBiuFfcLpau1RfWc3lOWufje0=", Nonce="ZGFrZHZueGJ6aGh1", Created="2004-10-31T14:08:34Z" --- と、あっさり書いてあるのですが、 ◆「認証情報をヘッダに挿入したGETリクエストを送信」◆はどうやれば良いのやら・・・ 強引にこうかいてみたのですが・・ -------- use LWP::UserAgent; $request = HTTP::Request->new(GET => 'http://cms.blog.livedoor.com/atom', ['X-WSSE'=>'User nameToken Username="*****", PasswordDigest="KxZ4DElJVqsIBXiF9ZIWCp59ghM", Nonce="YWFh", Created="2004-01-20T01:09:39Z"']); $ua = LWP::UserAgent->new; $response = $ua->request($request); print $response->content; ---------- 以下のように成ってしまいました。 ---------------- <?xml version="1.0" encoding="utf-8"?> <error>Invalid login</error> ---------------- どうかよろしくおねがいします。

    • ベストアンサー
    • Perl
  • JavaVMが出力したエラー内容がわかりません

    JavaVMが出力したエラーメッセージが読み取れず、 どのように対策すればよいかわかりません。 ヒープが不足してると言われているのでしょうか? ■エラーファイル内容 # # An unexpected error has been detected by HotSpot Virtual Machine: # # SIGBUS (0xa) at pc=0xf9902c68, pid=4189, tid=1 # # Java VM: Java HotSpot(TM) Client VM (1.4.2_09-b05 mixed mode) # Problematic frame: # J org.apache.crimson.tree.AttributeSet.createAttributeSet1(Lorg/xml/sax/Attributes;)Lorg/apache/crimson/tree/AttributeSet; # --------------- T H R E A D --------------- Current thread (0x00036fe8): JavaThread "main" [_thread_in_Java, id=1] siginfo:si_signo=10, si_errno=0, si_code=1, si_addr=0xffffffff Registers: (中略) Top of Stack: (sp=0xffbedc00) (中略) Instructions: (pc=0xf9902c68) (中略) Stack: [0xffb70000,0xffbf0000), sp=0xffbedc00, free space=503k Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code) J org.apache.crimson.tree.AttributeSet.createAttributeSet1(Lorg/xml/sax/Attributes;)Lorg/apache/crimson/tree/AttributeSet; j org.apache.crimson.tree.XmlDocumentBuilder.startElement(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lorg/xml/sax/Attributes;)V+19 J org.apache.crimson.parser.Parser2.maybeElement(Lorg/apache/crimson/parser/ElementValidator;)Z J org.apache.crimson.parser.Parser2.content(Lorg/apache/crimson/parser/ElementDecl;ZLorg/apache/crimson/parser/ElementValidator;)V J org.apache.crimson.parser.Parser2.maybeElement(Lorg/apache/crimson/parser/ElementValidator;)Z J org.apache.crimson.parser.Parser2.content(Lorg/apache/crimson/parser/ElementDecl;ZLorg/apache/crimson/parser/ElementValidator;)V J org.apache.crimson.parser.Parser2.maybeElement(Lorg/apache/crimson/parser/ElementValidator;)Z j org.apache.crimson.parser.Parser2.parseInternal(Lorg/xml/sax/InputSource;)V+112 j org.apache.crimson.parser.Parser2.parse(Lorg/xml/sax/InputSource;)V+6 j org.apache.crimson.parser.XMLReaderImpl.parse(Lorg/xml/sax/InputSource;)V+147 j org.apache.crimson.jaxp.DocumentBuilderImpl.parse(Lorg/xml/sax/InputSource;)Lorg/w3c/dom/Document;+59 j org.apache.log4j.xml.DOMConfigurator.doConfigure(Lorg/xml/sax/InputSource;Lorg/apache/log4j/spi/LoggerRepository;)V+137 j org.apache.log4j.xml.DOMConfigurator.doConfigure(Ljava/io/InputStream;Lorg/apache/log4j/spi/LoggerRepository;)V+10 j org.apache.log4j.xml.DOMConfigurator.doConfigure(Ljava/lang/String;Lorg/apache/log4j/spi/LoggerRepository;)V+14 j org.apache.log4j.xml.DOMConfigurator.configure(Ljava/lang/String;)V+11 j (中略) --------------- P R O C E S S --------------- Java Threads: ( => current thread ) (中略) Other Threads: (中略) VM state:not at safepoint (normal execution) VM Mutex/Monitor currently owned by a thread: None Heap def new generation total 2112K, used 929K [0xf1400000, 0xf1620000, 0xf1b10000) eden space 2048K, 42% used [0xf1400000, 0xf14d85e8, 0xf1600000) from space 64K, 100% used [0xf1600000, 0xf1610000, 0xf1610000) to space 64K, 0% used [0xf1610000, 0xf1610000, 0xf1620000) tenured generation total 1408K, used 747K [0xf1b10000, 0xf1c70000, 0xf5400000) the space 1408K, 53% used [0xf1b10000, 0xf1bcaff8, 0xf1bcb000, 0xf1c70000) compacting perm gen total 4352K, used 4176K [0xf5400000, 0xf5840000, 0xf9400000) the space 4352K, 95% used [0xf5400000, 0xf5814380, 0xf5814400, 0xf5840000) Dynamic libraries: (中略) VM Arguments: java_command: (中略) Environment Variables: JAVA_HOME=/usr/j2se CLASSPATH=(中略) PATH=(中略) LD_LIBRARY_PATH=(中略) SHELL=/bin/sh --------------- S Y S T E M --------------- (中略) vm_info: Java HotSpot(TM) Client VM (1.4.2_09-b05) for solaris-sparc, built on Jul 25 2005 23:50:28 by unknown with Workshop 5.2 compat=5

  • XMLのparseエラーについて

    JavaのURLでWASにあるXMLファイルにアクセスし、その内容をcom.sun.xml.tree.XmlDocumentクラスのインすタンスを生成したいと思っています。 ソース抜粋 PrintWriter out = new PrintWriter(new OutputStreamWriter(con.getOutputStream(), "UTF-8")); out.print(xmlDoc.writeString()); out.flush(); out.close(); con.connect(); BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream(), "UTF-8")); String inputLine = null; while ((inputLine = in.readLine()) != null) { answer.append(inputLine); } new XmlDocument(is, false); 上記のnew XmlDocument(is, false);を実行したら、例外で落ちてしまいます。 エラー内容は、org.xml.sax.SAXParseException: com.sun.xml.parser/P-019 XMLの書式が悪いと思いためしに、 new XmlDocument(is, false);を実行する前に、XMLファイルを作成し、ブラウザで表示したところ正常でした。 原因がわかりません、皆さんよろしくお願いします。

  • atomのフィードをphpで出力したい

    よろしくお願い致します。 phpの勉強を最近始めまして、 ブログの更新情報をphpで作ったページに出力させたいと思っています。 <?PHP require_once("RSS.php"); $rss=new XML_RSS("http://xmlのアドレス?"); $rss->parse(); ?> <h1><?php print(mb_convert_encoding($rss->channel['title'],"EUC-JP","auto")); ?></h1> <ul> <?php foreach($rss->items as $item){ ?> <?PHP print(mb_convert_encoding($item['$title'],"EUC-JP","auto")); ?> <li> <a href="<?php print($item['link']); ?>"> <?php print(mb_convert_encoding($item['title'],"EUC-JP","auto")); ?> </a> </li> <?php } ?> </ul> こんなスクリプトでrss1.0はタイトルとリンクが上手く表示されるのですが、atomのフィードで表示させようとするとtitleは表示されるのですがlinkが上手く取得できません。 ネットで検索してみたのですが、 通常atomのフィードはMagpieRSS等を利用してrss1.0等に変換したのちに上記のようなスクリプトを利用して表示させるという考え方でよろしいでしょうか? またatomのフィードをスクリプトで表示させる参考になるおすすめのサイトをご存知でしたらURLを教えていただけますでしょうか? どうぞ皆様ご指導よろしくお願い致します。

    • ベストアンサー
    • PHP
  • c言語についての質問です

    c言語についての質問です 家庭教師のとりまとめをすることになった。 友人たちの「名前」、「希望月謝」、「希望学年(例えば高校生の、特定の学年 1~3のみを指定するものとする)」をデータとして管理する。家庭教師の依頼 があったとき、学年と希望月謝を入力すると、その学年を希望している友人の 中から希望月謝の近い3人を表示するプログラムを作成せよ。同一金額(差額) の希望月謝に対する処理は無視しても良い。 まず、構造体を使わないプログラムを nostruct2.c として考えると、 データはプログラム中に例えば以下のように記述すること。 char name[15][10] = {"Andou", "Inoue", "Ueno", "Endou", "Okazaki", "Katou", "Simizu", "Tsuda", "Nemoto", "Hotta", "Miura", "Yamazaki", "Wada", "Fujii", "Jinbo"}; int data[15][2] = {{10000, 2}, {20000, 1}, {15000, 2}, {18000, 3}, {22000, 3}, {13000, 1}, {17000, 2}, {25000, 3}, {21000, 2}, {19000, 1}, {30000, 3}, {29000, 3}, {14000, 1}, {23000, 1}, {28000, 2}}; 学年:2、希望月謝 18500 円と入力したとき、例えば以下のような出力をする。 1: 17000 円、(7) Simizu 2: 21000 円、(9) Nemoto 3: 15000 円、(3) Ueno これを nostruct2.c として保存しておいてから、次に、「構造体 の配列」を使って表現しなおした プログラムをstruct2.cとして作成する方法を教えてください。 実行例は以下のようです 1 20000 1: 20000円、(2) Inoue 2: 19000円、(10) Hotta 3: 23000円、(14) Fujii 2 18500 1: 17000円、(7) Simizu 2: 21000円、(9) Nemoto 3: 15000円、(3) Ueno 3 30000 1: 30000円、(11) Miura 2: 29000円、(12) Yamazaki 3: 25000円、(8) Tsuda

  • $_POSTの内容をMySQLに保存するには?

    いつも大変お世話になり誠にありがとうございます。 度々申し訳ございません。 標記の件。 エラーメッセージは Parse error: syntax error, unexpected identifier "into", expecting ")" in C:\xampp\htdocs\kanryou.php on line 9 です。 コードは先ほども提示したように blog_create.php <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Blog</title> </head> <body> <?php $name = $_POST["name"]; $title = $_POST["title"]; $category = $_POST["category"]; $content = nl2br($_POST["content"]); echo "ペンネーム{$name}"; echo "ブログタイトル{$title}"; echo "カテゴリー {$category}"; echo "本文 {$content}"; ?> <hr> <br> <form action="/kanryou.php" method=""> <input type="submit" value="送信する"> </form> </main> </body> kanryou.php <?php require_once(blog_create.php); try{ $db = new PDO('mysql:dbname=blog_app;host=localhost;charset=utf8','root'); $count = $db->exec(INSERT into blog (id,name,title ,category ,content,post_at) ($_POST["id"],$_POST["name"],$_POST["title"],$_POST["category"],$_POST["content"],$_POST["post_at"]){ echo 'DB接続エラー' . $e->getMessage(); } </main> </body> echo "送信完了です。ありがとうございました。"; ?> 本当に申し訳ありません どうか教えてください。 どこを直せばいいでしょうか? ご回答のほど宜しくお願い申し上げます。

    • ベストアンサー
    • MySQL

専門家に質問してみよう