ホームページ  >  記事  >  バックエンド開発  >  php XML ファイル解析クラス (デモコード付き)

php XML ファイル解析クラス (デモコード付き)

WBOY
WBOYオリジナル
2016-07-25 08:55:21763ブラウズ
  1. /**XMLファイル解析教室

  2. * 作成日: 2013-02-01
  3. * 作成者: fdipzone
  4. * Ver: 1.0
  5. * エディション bbs.it-home.org
  6. * func:
  7. * loadXmlFile($xmlfile) xmlファイルを読み込み配列を出力
  8. * loadXmlString($xmlstring) は xmlstring を読み取り、配列を出力します
  9. */
  10. class XMLParser{
  11. /**XML ファイルを読み取る
  12. * @param String $xmlfile
  13. * @return Array
  14. */
  15. public function loadXmlFile($xmlfile){
  16. // get xmlfile の内容
  17. $xmlstring = file_exists($xmlfile)? file_get_contents($xmlfile) : '';
  18. // パーサー xml
  19. list($flag, $data) = $this->parser($xmlstring);
  20. return $this->response($flag, $data);
  21. }
  22. /* *读取xmlstring
  23. * @param String $xmlstring
  24. * @return Array
  25. */
  26. public function loadXmlString($xmlstring){
  27. // パーサー XML
  28. list($flag, $data) = $this->parser($xmlstring);
  29. return $this->response($flag, $data);
  30. }
  31. /**XML コンテンツを解釈します
  32. * @param String $xmlstring
  33. * @return Array
  34. */
  35. プライベート関数パーサー($xmlstring){
  36. $flag = false;
  37. $data = array();
  38. // XML 形式をチェック
  39. if($this->checkXmlFormat($xmlstring)){
  40. $flag = true;
  41. // xml からオブジェクト
  42. $data = simpleXML_load_string($xmlstring, 'SimpleXMLElement', LIBXML_NOCDATA);
  43. // オブジェクトを配列に変換
  44. $this->objectToArray($data);
  45. }
  46. return array($flag, $data);
  47. }
  48. /**XML形式が正しいか確認してください
  49. * @param String $xmlstring
  50. * @return boolean
  51. */
  52. プライベート関数 checkXmlFormat($xmlstring){
  53. if($xmlstring==''){
  54. return false; $xml_parser_obj = xml_parser_create();
  55. if(xml_parse_into_struct($xml_parser_obj, $xmlstring, $vals, $indexs)===1){ // 1:成功 0:失敗
  56. return true;
  57. }else{
  58. false を返します。
  59. }
  60. }

  61. /**object 转 配列

  62. * @param object $object
  63. * @return 配列
  64. */
  65. プライベート関数 objectToArray(&$object){
  66. $object = (array)$object;
  67. foreach($object as $key => $value){
  68. if($value== ''){
  69. $object[$key] = "";
  70. }else{
  71. if(is_object($value) || is_array($value)){
  72. $this->objectToArray($value);
  73. $object[$key] = $value;
  74. }
  75. }
  76. }
  77. }

  78. /**出力は戻り値

  79. * @param boolean $flag true:false
  80. * @param Array $data 変換されたデータ
  81. * @return Array
  82. */
  83. プライベート関数response($flag=false, $data=array()){
  84. return array($flag, $data);
  85. }
  86. }
  87. ?>

  88. 复制番号
2、演示例

require "XMLParser.class.php";
  • $xmlfile = 'file.xml';
  • $xmlstring = '
  • 1000ステータス>
  • <結果>100
  • fdipzone
  • 1性別>
  • 28年齢>
  • ';
  • echo '
    ';  </li>
    <li> </li>
    <li>$xml_parser = 新しい XMLParser();  </li>
    <li>echo "応答 xmlfilern";  </li>
    <li>list($flag, $xmldata) = $xml_parser->loadXmlFile($xmlfile);  </li>
    <li>if($flag){ </li>
    <li> print_r($xmldata);  </li>
    <li>} </li>
    <li> </li>
    <li>echo "応答 xmlstringrn";  </li>
    <li>list($flag, $xmldata) = $xml_parser->loadXmlString($xmlstring);  </li>
    <li>if($flag){ </li>
    <li> print_r($xmldata);  </li>
    <li>} </li>
    <li> </li>
    <li>echo '
    ';
  • ?>
  • 复制代
  • 附、PHP XML预定义常量: http://bbs.it-home.org/shouce/php5/libxml.constants.html

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