-
-
#---------------------------------- -------- - #
- # XML ライブラリ、Keith Devens 著、バージョン 1.2b
- # http://keithdevens.com/software/phpxml
- #
- # このコードはオープンソースであり、芸術的ライセンスと同様の条件に基づいてリリースされています。
- # http://keithdevens.com/software/license でライセンスを読んでください。
- #
- #------------------------------------------
- # XML_unserialize:生の XML をパラメータ (文字列) として受け取り
- # 、同等の PHP データ構造を返します
- #---------------------------- -------------
- function & XML_unserialize(&$xml){
- $xml_parser = &new XML();
- $data = &$xml_parser->parse($xml);
- $xml_parser->destruct();
- $data を返します。
- }
- ----------------------#####
- # XML_serialize: 任意の PHP データ構造を XML にシリアル化します
- # 1 つのパラメータを取ります: データシリーズ化すること。配列である必要があります。
- -------------------------------------#
- function & XML_serialize(&$data, $level = 0, $prior_key = NULL){
- if($level == 0){ ob_start(); echo '',"n"; }
- while(list($key, $value) = each($data))
- if(!strpos($key, ' attr')) #属性ではない場合
- #属性を単独で扱いません。したがって、属性を持つ空の要素
- # の場合でも、要素を NULL
に設定する必要があります。 if(is_array($value) および array_key_exists(0, $value)){
- XML_serialize($value, $level, $key);
- }else{
- $tag = $prior_key ? $prior_key : $key;
- echo str_repeat("t", $level),'<',$tag;
- if(array_key_exists("$key attr", $data)){ #この要素に属性がある場合
- while(list($attr_name, $attr_value) = each($data["$key attr"]))
- echo ' ',$attr_name,'="',htmlspecialchars($attr_value),'"';
- リセット($data["$キー属性"]);
- }
if(is_null($value)) echo " />n";
- elseif(!is_array($value)) echo '>',htmlspecialchars($value),"$tag>n";
- else echo ">n",XML_serialize($value, $level+1),str_repeat("t", $level),"$tag>n";
- }
- リセット($data);
- if($level == 0){ $str = &ob_get_contents(); ob_end_clean(); $str を返します。 }
- }
- #-----------------------#
- # XML クラス: PHP の XML 処理関数で使用されるユーティリティ クラス
- #---- -------------------#
- クラス XML{
- var $parser; #XML パーサーへの参照
- var $document; #これまでに構築された XML 構造全体
- var $parent; #現在の親へのポインター - 親は配列になります
- var $stack; #各ネストレベルでの最新の親のスタック
- var $last_opened_tag; #最後に開かれたタグを追跡します。
function XML(){
- $this->parser = &xml_parser_create();
- xml_parser_set_option(&$this->parser, XML_OPTION_CASE_FOLDING, false);
- xml_set_object(&$this->パーサー, &$this);
- xml_set_element_handler(&$this->parser, 'open','close');
- xml_set_character_data_handler(&$this->parser, 'data');
- }
- 関数 destruct(){ xml_parser_free(&$this->parser); }
- function & parse(&$data){
- $this->document = array();
- $this->stack = array();
- $this->parent = &$this->document;
- return xml_parse(&$this->parser, &$data, true) ? $this->ドキュメント : NULL;
- }
- function open(&$parser, $tag, $attributes){
- $this->data = ''; #一時的な cdata を保存します
- $this->last_opened_tag = $tag;
- if(is_array($this->parent) and array_key_exists($tag,$this->parent)){ #このタグを以前に見たことがある場合
- if(is_array($this->parent[$tag ]) and array_key_exists(0,$this->parent[$tag])){ #キーが数値の場合
- #これは、$tag の 3 番目以降のインスタンスです
- $key = count_numeric_items($ this->parent[$tag]);
- }else{
- #これは、$tag の 2 番目のインスタンスです。前後にシフト
- if(array_key_exists("$tag attr",$this->parent)){
- $arr = array('0 attr'=>&$this->parent["$tag attr"], &$this->親[$tag]);
- unset($this->parent["$tag attr"]);
- }else{
- $arr = array(&$this->parent[$tag]);
- }
- $this->parent[$tag] = &$arr;
- $key = 1;
- }
- $this->parent = &$this->parent[$tag];
- }else{
- $key = $tag;
- }
- if($attributes) $this->parent["$key attr"] = $attributes;
- $this->parent = &$this->parent[$key];
- $this->stack[] = &$this->parent;
- }
- function data(&$parser, $data){
- if($this->gt;last_opened_tag != NULL) #タグの間に空白を格納する必要はありません
- $this->data .= $data ;
- }
- function close(&$parser, $tag){
- if($this->gt;last_opened_tag == $tag){
- $this->parent = $this->data;
- $this->last_opened_tag = NULL;
- }
- array_pop($this->stack);
- if($this->stack) $this->parent = &$this->stack[count($this->stack)-1];
- }
- }
- function count_numeric_items(&$array){
- return is_array($array) ? count(array_filter(array_keys($array), 'is_numeric')) : 0;
- }
- ?>
-
复制代
アプリケーション例、XML ソース アドレス: http://data.cnaz.com/spread/?tid=7&sid=42845&order=date&flags=desc&num=50
&page=1&hosts=pic.ttiankan.com&code=xml
-
- include('xml.php'); //PHP XML 操作クラスの参照
$page=$_GET['page ' ];
if(empty($page) || !is_numeric($page)) $page=1;
//アイドルスター
- $ xml = file_get_contents('http://data.cnaz.com/spread/?tid=7&sid=42845&order=date&flags=desc&num=50
- &page='.$page.'&hosts=pic.ttiankan.com&code=xml'); ;/p>
- //$xml = file_get_contents("php://input"); //POST から入力ストリームを読み取ります
- $data=XML_unserialize($xml)
-
$item=$data['rss']['channel'];
$link = $item['link'];
- $description= $item[ '説明'];
- $keywords = $item['keywords'];
- $totalnum = $item['totalnum'];
- $usetime = $item['usetime'];
echo(' キーワード:'.$keywords.');
- echo('レコードの総数:'.$totalnum.'、各ページには 50 件のレコードが表示され、合計は '.$ totalpage.' ページ、現在のページ '.$page.'
');
$item=$item['item'];
- < p> ;echo('
-
- *{font-size:12px;color:#000;font-family:arial;}
- a{text-decoration:none;}
- a:hover{text-decoration:下線 ;}
- .tbl{ボーダートップ:1px #ccc ソリッド;ボーダー左:1px #ccc ソリッド;}
- .tbl td{パディング:4px 5px;ボーダーボトム:1px #ccc ソリッド;ボーダー右:1px # ccc Solid;}
-
- ');
echo('
-
-
-
カテゴリ |
-
タイトル |
-
リンク |
- tr>
- ');
foreach($item as $list)
- {
- echo('
');
- echo('
'.$list[ 'sort '].' | ');
- echo('
'.$list['title'].' | ');
- echo('
'.$list['link'].' | ');
- echo(' tr> ');
- }
echo('
-
- ');
- if($page>1) echo(' < a href="b.php?page='.($page-1).'">前のページ ');
- if($page<$totalpage) echo('< a href=" b.php?page='.($page+1).'">次のページ');
- echo('
') ;
echo(' ');
- ?>
-
-
コードをコピーします
Script School の編集者は次のことを推奨します。
PHP操作xmlのサンプルコード
phpでxmlファイルを読み書きする方法の紹介
php関数を使用してXMLファイルを出力する例
関数メソッドを使用してXMLファイルを読み取るPHPの例
PHP で XML を読み取るいくつかの方法
XML 値を読み取るための PHP コード
PHP操作のXML解析の色々な方法
PHP で XML ファイルを生成する 4 つの方法
phpでxmlを生成する簡単な例を詳しく解説
phpを使用してxmlにデータを追加する例
例を挙げて XML クラス DOMDocument を操作するための php を学びましょう
|