人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHPでパーサを作る勉強を始めました。
主に下記サイトです。
http://www.geocities.jp/xmlfirststep/pxml/pxml_menu.html

このサイトの通り、
1.自分のローカルの環境(Apache2.2)
2.レンタルサーバ
http://1811way.com/work003/xmlpaser_sample1.php
でファイルを作成し実行しました。

上記1.では
あいうえお
XML error: Space required at line 3

上記2.では
あいうえお
XML error: not well-formed (invalid token) at line 2

とエラーが出てきます。

ソースは
http://1811way.com/work003/index.html
です。

xmlにスペースが必要、とのエラーのようですが、
わかりません。
ご存じであれば、
アドバイスいただけると助かります。

よろしくお願いします。

●質問者: kohhi
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● Cherenkov
●67ポイント ベストアンサー

目的はなんですか?参考にされている情報が古いようですが。
PHP5のsimplexml_load_fileを使ったサンプルを書きました。utf-8で保存。

sensyu2.xml

<?xml version="1.0" encoding="UTF-8"?> 
<list>
<選手 no="51">
<氏名>
<姓>鈴木</姓>
<名>イチロー</名>
</氏名>
<守備>ライト</守備>
<チーム>マリナーズ</チーム>
</選手>
<選手 no="3">
<氏名>
<姓>長嶋</姓>
<名>茂雄</名>
</氏名>
<守備>三塁手</守備>
<チーム>読売ジャイアンツ</チーム>
</選手>
</list>

xmlpaser_sample1.php

<?php
//header('Content-Type:text/html; charset=UTF-8');

function pr($var) {
echo '<pre>'; print_r($var); echo '</pre>';
}

$filename = "sensyu2.xml";
$xml = simplexml_load_file($filename, 'SimpleXMLElement', LIBXML_NOCDATA);
foreach ($xml as $player) {
//pr($player);
echo "選手 [{$player->氏名->} {$player->氏名->}]<br>";
echo " 守備 {$player->守備}<br>";
echo " 所属 {$player->チーム}<br>";
echo " 背番号 {$player->attributes()->no}<br>";
}
//pr($xml);

結果

選手 [鈴木 イチロー]
 守備 ライト
 所属 マリナーズ
 背番号 51
選手 [長嶋 茂雄]
 守備 三塁手
 所属 読売ジャイアンツ
 背番号 3

参考:PHP: simplexml_load_file - Manual


kohhiさんのコメント
いつもお返事ありがとうございます。 もういちど、まとめて、質問させていただきます。

2 ● pretaroe
●67ポイント

XMLの中に漢字(日本語)を使わない同等のものを用いて
動作確認して見てください。

どうも漢字の扱いがうまくいっていないと思います。


PHPのバージョンにもよりますが
PHP5などでは、UTF-8の処理できますのでそちらを採用した方がよいでしょう。


kohhiさんのコメント
アドバイスありがとうございます。

3 ● gizmo5
●66ポイント

質問のリンク先のソースを見ました。
XML 宣言が化けているのは、ご愛嬌として、XML の体裁が整っていません。
XML 宣言が最初に来て、次には、唯一のルートノードが無くてはいけません。
9行目は、</選手> となってなくちゃいけなくて、
10行目、11行目は、付けちゃいけません。

一番目の人のサンプルのように、選手データを複数持たせたければ、
その外側を唯一のノード(タグ)でくくってあげる必要があります。

後、PHP のソースで、102行目の文字コード変換がいけません。
文字コードは、XML 宣言の charset になってる必要があります。
宣言で charset が UTF-8 になっているのに、文字コードだけ変換しては、パースエラーになります。


kohhiさんのコメント
さっそくお返事ありがとうございます。 ご指摘、大変参考になりました。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ