ウェブ|挿入|サイト
ネスト時間
前の例は、問題を説明するためのものです。本当に RDF コンテンツを Web サイトに挿入したい場合は、もう少し工夫する必要があります。したがって、RDF データのフォーマット作業を簡素化するために、以前のスクリプトが改善され、いくつかの新しい機能が追加されました。
今日の freshmeat.net の新リリース: |
// XML ファイル
$file = "http://www.freshmeat.net/backend/fm-releases.rdf";
// パーサーで使用する変数をいくつか設定します
$currentTag = "";
$ flag = "";
$count = 0;
// これはキーを含むチャンネルデータの連想配列です ("title",
"link",
"description")
$channel = array();
// これは配列の配列であり、各配列要素は
- を表します。 // 外側の各配列要素はそれ自体が連想配列です
// キー ("title"、"link"、"description") を持ちます
$items = array();
// タグハンドラーを開始します
function elementBegin($parser, $name, $attributes)
{
global $currentTag, $flag;
$currentTag = $name;
// set flag if または - ブロックを入力します
if ($name == "ITEM")
{
$flag = 1;
}
else if ($name == "CHANNEL")
{
$flag = 2;
}
}
// 終了タグハンドラー
function elementEnd($parser, $name)
{
global $currentTag, $flag, $count;
$currentTag = "";
// フラグを設定 if または - ブロックを終了します
if ($name == "ITEM")
{
$count++;
$flag = 0;
}
else if ($name == "CHANNEL")
{
$flag = 0;
}
}
// 文字データ ハンドラー
function CharacterData($parser, $data)
{
global $currentTag, $flag, $items, $count, $channel;
$data =トリム(htmlspecialchars($data));
if ($currentTag == "TITLE" || $currentTag == "LINK" ||
$currentTag ==
"DESCRIPTION")
{
// $channels にデータを追加[] または $items[] 配列
if ($flag == 1)
{
$items[$count][strto lower($currentTag)] .=
$data;
}
else if ($flag == 2) )
{
$channel[strto lower($currentTag)] .= $data;
}
}
}
// パーサーを作成します
$xp = xml_parser_create();
// 要素ハンドラーを設定します
xml_set_element_handler($
XML ファイルを読み取る
if (!($fp = fopen($file, "r")))
{
die("$file を読み取れませんでした");
}
// データを解析します
while ($xml = fread( $fp, 4096))
{
if (!xml_parse($xp, $xml, feof($fp)))
{
die("XML パーサー エラー: " .
xml_error_string(xml_get_error_code($xp) ));
}
}
// parser
xml_parser_free($xp);
// $items[] 配列を反復処理して
// 各項目をテーブル行として出力します
foreach ($items as $ item)
{
echo ""
|
"; }
?>
with 前の段落との主な違いは、このスクリプトが分析中に抽出された情報を保持する 2 つの配列を作成することです。このうち、$channel は処理対象のチャネルの基本的な説明情報を格納する連想配列、$items は個々のチャネル エントリに関する情報を含む 2 次元配列です。 $items 配列の各要素は、それ自体が和集合配列であり、タイトル、URL、および説明のキーワードが含まれています。 $items 配列内の要素の合計数は、RDF ドキュメント内の
- ブロックの合計数と同じです。
$flag 変数の変更にも注目してください。この変数は、 ブロックが処理されているかどうかに応じて 2 つの値を保持します。これが必要なのは、この方法でのみアナライザーが情報を正しい配列に入れることができるためです。
ドキュメントが解析されたら、あとは簡単です。$items 配列をループし、その中の各項目を表形式で出力します。