XMLを読み取るためのPHPクラス

WBOY
リリース: 2016-07-25 09:04:08
オリジナル
1266 人が閲覧しました
  1. #---------------------------------- --------

  2. #
  3. # XML ライブラリ、Keith Devens 著、バージョン 1.2b
  4. # http://keithdevens.com/software/phpxml
  5. #
  6. # このコードはオープンソースであり、芸術的ライセンスと同様の条件に基づいてリリースされています。
  7. # http://keithdevens.com/software/license でライセンスを読んでください。
  8. #
  9. #------------------------------------------
  10. # XML_unserialize:生の XML をパラメータ (文字列) として受け取り
  11. # 、同等の PHP データ構造を返します
  12. #---------------------------- -------------
  13. function & XML_unserialize(&$xml){
  14. $xml_parser = &new XML();
  15. $data = &$xml_parser->parse($xml);
  16. $xml_parser->destruct();
  17. $data を返します。
  18. }
  19. ----------------------#####
  20. # XML_serialize: 任意の PHP データ構造を XML にシリアル化します
  21. # 1 つのパラメータを取ります: データシリーズ化すること。配列である必要があります。
  22. -------------------------------------#
  23. function & XML_serialize(&$data, $level = 0, $prior_key = NULL){
  24. if($level == 0){ ob_start(); echo '',"n"; }
  25. while(list($key, $value) = each($data))
  26. if(!strpos($key, ' attr')) #属性ではない場合
  27. #属性を単独で扱いません。したがって、属性を持つ空の要素
  28. # の場合でも、要素を NULL

  29. に設定する必要があります。 if(is_array($value) および array_key_exists(0, $value)){

  30. XML_serialize($value, $level, $key);
  31. }else{
  32. $tag = $prior_key ? $prior_key : $key;
  33. echo str_repeat("t", $level),'<',$tag;
  34. if(array_key_exists("$key attr", $data)){ #この要素に属性がある場合
  35. while(list($attr_name, $attr_value) = each($data["$key attr"]))
  36. echo ' ',$attr_name,'="',htmlspecialchars($attr_value),'"';
  37. リセット($data["$キー属性"]);
  38. }

  39. if(is_null($value)) echo " />n";

  40. elseif(!is_array($value)) echo '>',htmlspecialchars($value),"n";
  41. else echo ">n",XML_serialize($value, $level+1),str_repeat("t", $level),"n";
  42. }
  43. リセット($data);
  44. if($level == 0){ $str = &ob_get_contents(); ob_end_clean(); $str を返します。 }
  45. }
  46. #-----------------------#
  47. # XML クラス: PHP の XML 処理関数で使用されるユーティリティ クラス
  48. #---- -------------------#
  49. クラス XML{
  50. var $parser; #XML パーサーへの参照
  51. var $document; #これまでに構築された XML 構造全体
  52. var $parent; #現在の親へのポインター - 親は配列になります
  53. var $stack; #各ネストレベルでの最新の親のスタック
  54. var $last_opened_tag; #最後に開かれたタグを追跡します。

  55. function XML(){

  56. $this->parser = &xml_parser_create();
  57. xml_parser_set_option(&$this->parser, XML_OPTION_CASE_FOLDING, false);
  58. xml_set_object(&$this->パーサー, &$this);
  59. xml_set_element_handler(&$this->parser, 'open','close');
  60. xml_set_character_data_handler(&$this->parser, 'data');
  61. }
  62. 関数 destruct(){ xml_parser_free(&$this->parser); }
  63. function & parse(&$data){
  64. $this->document = array();
  65. $this->stack = array();
  66. $this->parent = &$this->document;
  67. return xml_parse(&$this->parser, &$data, true) ? $this->ドキュメント : NULL;
  68. }
  69. function open(&$parser, $tag, $attributes){
  70. $this->data = ''; #一時的な cdata を保存します
  71. $this->last_opened_tag = $tag;
  72. if(is_array($this->parent) and array_key_exists($tag,$this->parent)){ #このタグを以前に見たことがある場合
  73. if(is_array($this->parent[$tag ]) and array_key_exists(0,$this->parent[$tag])){ #キーが数値の場合
  74. #これは、$tag の 3 番目以降のインスタンスです
  75. $key = count_numeric_items($ this->parent[$tag]);
  76. }else{
  77. #これは、$tag の 2 番目のインスタンスです。前後にシフト
  78. if(array_key_exists("$tag attr",$this->parent)){
  79. $arr = array('0 attr'=>&$this->parent["$tag attr"], &$this->親[$tag]);
  80. unset($this->parent["$tag attr"]);
  81. }else{
  82. $arr = array(&$this->parent[$tag]);
  83. }
  84. $this->parent[$tag] = &$arr;
  85. $key = 1;
  86. }
  87. $this->parent = &$this->parent[$tag];
  88. }else{
  89. $key = $tag;
  90. }
  91. if($attributes) $this->parent["$key attr"] = $attributes;
  92. $this->parent = &$this->parent[$key];
  93. $this->stack[] = &$this->parent;
  94. }
  95. function data(&$parser, $data){
  96. if($this->gt;last_opened_tag != NULL) #タグの間に空白を格納する必要はありません
  97. $this->data .= $data ;
  98. }
  99. function close(&$parser, $tag){
  100. if($this->gt;last_opened_tag == $tag){
  101. $this->parent = $this->data;
  102. $this->last_opened_tag = NULL;
  103. }
  104. array_pop($this->stack);
  105. if($this->stack) $this->parent = &$this->stack[count($this->stack)-1];
  106. }
  107. }
  108. function count_numeric_items(&$array){
  109. return is_array($array) ? count(array_filter(array_keys($array), 'is_numeric')) : 0;
  110. }
  111. ?>

复制代

アプリケーション例、XML ソース アドレス: http://data.cnaz.com/spread/?tid=7&sid=42845&order=date&flags=desc&num=50 &page=1&hosts=pic.ttiankan.com&code=xml

  1. include('xml.php'); //PHP XML 操作クラスの参照

  2. $page=$_GET['page ' ];

  3. if(empty($page) || !is_numeric($page)) $page=1;

  4. //アイドルスター

  5. $ xml = file_get_contents('http://data.cnaz.com/spread/?tid=7&sid=42845&order=date&flags=desc&num=50
  6. &page='.$page.'&hosts=pic.ttiankan.com&code=xml'); ;/p>
  7. //$xml = file_get_contents("php://input"); //POST から入力ストリームを読み取ります
  8. $data=XML_unserialize($xml)
  9. $ite​​m=$data['rss']['channel'];

  10. $link = $item['link'];

  11. $description= $item[ '説明'];
  12. $keywords = $item['keywords'];
  13. $totalnum = $item['totalnum'];
  14. $usetime = $item['usetime'];

  15. echo('

    キーワード:'.$keywords.');
  16. echo('レコードの総数:'.$totalnum.'、各ページには 50 件のレコードが表示され、合計は '.$ totalpage.' ページ、現在のページ '.$page.'
');

  • $ite​​m=$item['item'];

  • < p> ;echo('
  • ');

  • echo('

  • ');

  • foreach($item as $list)

  • {
  • echo('
  • ');
  • echo('
  • ');
  • echo('
  • ');
  • echo('
  • ');
  • echo(' ');
  • }

  • 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('

  • カテゴリ タイトル リンク
    '.$list[ 'sort '].' '.$list['title'].' '.$list['link'].'
    ');
  • ?>

  • コードをコピーします 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 を学びましょう


    関連ラベル:
    ソース:php.cn
    このウェブサイトの声明
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
    人気のチュートリアル
    詳細>
    最新のダウンロード
    詳細>
    ウェブエフェクト
    公式サイト
    サイト素材
    フロントエンドテンプレート