ホームページ >php教程 >php手册 >PHP を使用して RDF コンテンツを Web サイトに挿入する方法 (4)

PHP を使用して RDF コンテンツを Web サイトに挿入する方法 (4)

WBOY
WBOYオリジナル
2016-06-21 09:02:20865ブラウズ

// これは配列の配列であり、各配列要素は
< を表します。アイテム> // 外側の各配列要素はそれ自体が連想配列です
// キー ("title", "link", "description") を持つ
$items = array(),

// オープニングタグハンドラー
関数 elementBegin($parser, $name, $attributes)
{
global $currentTag, $flag,
$ currentTag = $name,
// を入力する場合にフラグを設定します。または <アイテム> block
if ($name == "ITEM")
{
$flag = 1,
}
else if ($name == "CHANNEL")
{
$flag = 2,
}
}

// 終了タグハンドラー
function elementEnd($parser, $name)
{
global $currentTag, $flag, $count,
$currentTag = "",

// 終了する場合はフラグを設定 または <アイテム> block
if ($name == "ITEM")
{
$count++,
$flag = 0,
}
else if ($name == "CHANNEL")
{
$flag = 0,
}
}

// 文字データ ハンドラー
関数 characterData($parser, $data)
{
global $currentTag, $flag, $items, $count, $channel,
$data = トリム(htmlspecialchars($data)),
if ($currentTag == "TITLE" || $currentTag == "リンク" ||
$currentTag ==
"DESCRIPTION")
{
// $channels[] または $items[] array
if ($flag == 1)
{
$items[$count] にデータを追加します[strto lower($currentTag)] .=
$data,
}
else if ($flag == 2)
{
$channel[strto lower($currentTag)] .= $data,
}
}

}

// 作成parser
$xp = xml_parser_create(),

// 要素ハンドラーを設定
xml_set_element_handler($xp , "elementBegin", "elementEnd"),
xml_set_character_data_handler($xp, "characterData ")、
xml_parser_set_option($xp、XML_OPTION_CASE_FOLDING、TRUE)、
xml_parser_set_option($xp , XML_OPTION_SKIP_WHITE, TRUE),

// 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))),
}
}

// パーサー
xml_parser_free($xp),

// $items[] array
// を反復処理し、各項目をテーブル row
foreach として出力します ($items $item)
{
echo "<tr>href
= 。 $アイテム["リンク"] 。 「>」 。 $item["title"] .
"
<br>" . $item[「説明」] 。 "tr>", }

?>



前の段落との主な違いは、このスクリプトは分析プロセス中に抽出された情報を保存するために 2 つの配列を作成することです。このうち、$channelは、処理対象のチャネルの基本的な記述情報を格納する連想配列(連想配列)であり、 $items は、個々のチャネル エントリ (channel intems) に関する情報を含む 2 次元配列です。 $items配列自体の各要素は、title、URL および 説明 キーワード。 $items 配列内の要素の合計数は、RDF 内の ブロックの合計数と同じです。書類。
処理内容に応じて、$flag 変数の変更にも注意してください < ;channel> ; ブロックは ブロックのままで、2 つの値を保持します。これが必要なのは、この方法でのみアナライザーが情報を正しい配列に入れることができるためです。
ドキュメントが分析されれば、物事は簡単です - $items を反復処理します 配列。その中の各項目を表形式で出力します (item)。長旅の結果は以下の通り:

7)
クラスに戻るクラスに戻る)

そんなに大きな力があるのに、一体なぜ単一の RDF ソースに限定するのでしょうか? 先ほど が述べたように、ほとんどの主要サイトは、提供するコンテンツのスナップショットを頻繁に取得します。これらのさまざまなソースをすべてサイトに接続するのは、実際には非常に簡単です。それがどのように行われるかを見てみましょう。
まず、前の例のコードをモジュール化しましょう。こうすることで、単一のソースごとに同じコードを何度も書き直す必要がなくなります。簡素化された方法は、それをクラス
にパッケージ化し、このクラスを PHP スクリプトに含めることです。 クラス コードは次のとおりです:
class RDFParser

{/ /// 変数
//

// このクラスのローカル変数を設定します

var
$
currentTag = "" ,var $flag = "",
var $count = 0,
// これはキーを含むチャネル データの連想配列です("title", "link", "description")

var
$channel = array(),
// これは配列の配列であり、それぞれを表す配列要素
// 外側の各配列要素自体は連想配列
// キー ("title"、"link"、"description") を持つ

var
$items = array(),
//
//methods
//

// RDF ファイルの名前を設定しますparse
// これは通常ローカル ファイルです
// PHP ビルドが
URL
fopen
()
function をサポートしている場合は、リモート ファイルに設定できます。 setResource($file)
{$this->file = $file,}


//
setResource で設定された RDF ファイルを解析します
()
// $channel 配列と $items 配列に値を設定します関数 parseResource
()
{// パーサーを作成します$this-> ;
xp
=
xml_parser_create(),// オブジェクト参照を設定
xml_set_object
($this->gt;
xp , $this),// ハンドラーとパーサーのオプションを設定します
xml_set_element_handler
($this->
xp, "elementBegin ","elementEnd"),
xml_set_character_data_handler($this->
xp," CharacterData")、
xml_parser_set_option($this->
xpXML_OPTION_CASE_FOLDING、TRUE)、xml_parser_set_option
( $this ->
xp, XML_OPTION_SKIP_WHITE,TRUE),// XML ファイルを読み取ります




声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。