php XML檔案解析類(附示範代碼)

來源:互聯網
上載者:User
  1. /** XML 檔案分析類

  2. * Date: 2013-02-01
  3. * Author: fdipzone
  4. * Ver: 1.0
  5. * Edition bbs.it-home.org
  6. * func:
  7. * loadXmlFile($xmlfile) 讀入xml檔案輸出Array
  8. * loadXmlString($xmlstring) 讀入xmlstring 輸出Array
  9. */
  10. class XMLParser{
  11. /** 讀取xml檔案
  12. * @param String $xmlfile
  13. * @return Array
  14. */
  15. public function loadXmlFile($xmlfile){
  16. // get xmlfile content
  17. $xmlstring = file_exists($xmlfile)? file_get_contents($xmlfile) : '';
  18. // parser 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. // parser 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. private function parser($xmlstring){
  36. $flag = false;
  37. $data = array();
  38. // check xml format
  39. if($this->checkXmlFormat($xmlstring)){
  40. $flag = true;
  41. // xml to object
  42. $data = simpleXML_load_string($xmlstring, 'SimpleXMLElement', LIBXML_NOCDATA);
  43. // object to array
  44. $this->objectToArray($data);
  45. }
  46. return array($flag, $data);
  47. }
  48. /** 檢查xml格式是否正確
  49. * @param String $xmlstring
  50. * @return boolean
  51. */
  52. private function checkXmlFormat($xmlstring){
  53. if($xmlstring==''){
  54. return false;
  55. }
  56. $xml_parser_obj = xml_parser_create();
  57. if(xml_parse_into_struct($xml_parser_obj, $xmlstring, $vals, $indexs)===1){ // 1:success 0:fail
  58. return true;
  59. }else{
  60. return false;
  61. }
  62. }

  63. /** object 轉 Array

  64. * @param object $object
  65. * @return Array
  66. */
  67. private function objectToArray(&$object){
  68. $object = (array)$object;
  69. foreach($object as $key => $value){
  70. if($value==''){
  71. $object[$key] = "";
  72. }else{
  73. if(is_object($value) || is_array($value)){
  74. $this->objectToArray($value);
  75. $object[$key] = $value;
  76. }
  77. }
  78. }
  79. }

  80. /** 輸出返回

  81. * @param boolean $flag true:false
  82. * @param Array $data 轉換後的資料
  83. * @return Array
  84. */
  85. private function response($flag=false, $data=array()){
  86. return array($flag, $data);
  87. }
  88. }
  89. ?>

複製代碼

2,示範樣本

  1. require "XMLParser.class.php";
  2. $xmlfile = 'file.xml';
  3. $xmlstring = '
  4. 1000
  5. 100
  6. fdipzone
  7. 1
  8. 28
  9. ';
  10. echo '
    ';  
  11. $xml_parser = new XMLParser();
  12. echo "response xmlfile\r\n";
  13. list($flag, $xmldata) = $xml_parser->loadXmlFile($xmlfile);
  14. if($flag){
  15. print_r($xmldata);
  16. }
  17. echo "response xmlstring\r\n";
  18. list($flag, $xmldata) = $xml_parser->loadXmlString($xmlstring);
  19. if($flag){
  20. print_r($xmldata);
  21. }
  22. echo '
  23. ';
  24. ?>
複製代碼

附,PHP XML預定義常量: http://bbs.it-home.org/shouce/php5/libxml.constants.html

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.