欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

php XML文件解析类(附演示代码)

程序员文章站 2022-05-01 13:58:35
...
  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. ?>
复制代码

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