構造化されたXML文書を読みやすい文章(平文)に展開する
1.XML文書の特徴
XML(eXtensible Markup Language)は言語の仕様のことで、「拡張可能なマークアップ言語」と訳されており、文書のもつ「見出し」「本文」・・・などの論理構造を「タグ(<>で囲む)」と呼ばれるもので記述します。要するに文書の内容一つ一つに名前(タグ)を付与し、「タグ」を検索項目として文書の内容を読み取るといった手法を使って「書き手」と「読み手」の間で間違いなく情報を交換できるといった利点があります。
2.XML文書の例
<rdf:RDF xmlns="http://purl.org/rss/1.0/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:admin="http://webns.net/mvcb/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xml:lang="ja">
<channel rdf:about="">
<title>●●●日本語でタイトルを記述●●●</title>
<link/>
<description>●●●日本語で文書の内容を記述●●●</description>
<dc:date>2021-06-26 00:00:00+09:00</dc:date>
<dc:creator/>
<dc:subject/>
<dc:rights>Copyright ●●●著作権の所有者を記述●●●</dc:rights>
<sy:updatePeriod>weekly</sy:updatePeriod>
<sy:updateFrequency>1</sy:updateFrequency>
</channel>
<item rdf:about="●●●文書のURL●●●">
<title>新型コロナウイルスの感染症対策</title>
<link>●●●項目の詳細情報を掲載するURL●●●</link>
<description/>
<dc:date>2021-06-09T00:00:00+09:00</dc:date>
<dc:subject>●●●副題を記述●●●</dc:subject>
</item>
</rdf:RDF>
(例)新着情報として提供される内容
4行目・・・文書のタイトル
7行目~14行目・・・文書全体の説明
16行目~22行目・・・項目の記述、項目の数だけこの部分を繰返す
※20行目と21行目は19行目の内容を複数行の情報で補う
3.XML文書を読み込む
$i = 0;
$url = "●●●新着情報が掲載されているurl●●●";
$rss = simplexml_load_file($url);
if ($rss)
{
foreach ($rss->item as $item)
{
$title = $item->title;
$link = $item->link;
$desc = $item->description;
$date = date('Y年 m月 d日', strtotime($item->children("http://purl.org/dc/elements/1.1/")->date));
●●●項目に対する処理を記述●●●
}
}
else
{
echo "エラー発生";
}
3行目・・・XML文書(ファイル)全体を取り出す命令
7行目~14行目・・・<item>タグが存在する間、繰返す
※各項目(item)をタグ名で取り出す(title、link、date等々)
概ね新着情報等は規則正しく構成されているので、丁寧に構造を観察すれば、上記サンプルを修正するだけで読み込めます。
4.注意点(simplexml_load_file)
テスト段階で以下の様なメッセージが表示される場合
simplexml_load_file(): httWarning:ps:// wrapper is disabled in the server configuration by allow_url_fopen=0 in /●●●エラー発生のソースライン番号●●●
使っているサーバーが外部のXMLデータの読込を許可していないために発生するエラーです。
先ず使用しているサーバーの「php.ini」の「allow_url_fopen」パラメーターをチエックしてください。「allow_url_fopen=0」だと読込が許可されていないので外部のXMLデータは読込めません、「allow_url_fopen=on」に変更してください。
「php.ini」の変更ができないサーバーだと「simplexml_load_file」の命令は使用できないので別の方法(テキスト形式のファイルとして読込む方法)でお願いします。
コメントを残す