reorganisation des dossiers
[mtweb] / mw / libs / sxml.php
diff --git a/mw/libs/sxml.php b/mw/libs/sxml.php
new file mode 100644 (file)
index 0000000..7d5bf20
--- /dev/null
@@ -0,0 +1,69 @@
+<?php
+
+/*
+
+  from :
+
+  http://www.shop24-7.info/32-0-simplexml-alternative-php4.html
+
+  ajout :
+
+-  xml_parser_set_option($this->parser, XML_OPTION_CASE_FOLDING, 0);
+   dans la fonction parse($data) pour la prise en compte de la casse
+
+-  if($attribs) $this->data['attrs'] = $attribs;
+   dans la fonction tag_open pour la prise en compte des attributs
+
+*/
+
+  class sxml{
+  
+    var $parser;
+    var $error_code;
+    var $error_string;
+    var $current_line;
+    var $current_column;
+    var $data;
+    var $datas;
+  
+    function parse($data){
+  //    $this->parser = xml_parser_create('UTF-8');
+      $this->data = array();
+      $this->datas = array();
+      $this->parser = xml_parser_create();
+      xml_set_object($this->parser, $this);
+      xml_parser_set_option($this->parser, XML_OPTION_SKIP_WHITE, 1);
+      xml_parser_set_option($this->parser, XML_OPTION_CASE_FOLDING, 0);
+      xml_set_element_handler($this->parser, 'tag_open', 'tag_close');
+      xml_set_character_data_handler($this->parser, 'cdata');
+      if (!xml_parse($this->parser, $data)){
+        $this->data = array();
+        $this->error_code = xml_get_error_code($this->parser);
+        $this->error_string = xml_error_string($this->error_code);
+        $this->current_line = xml_get_current_line_number($this->parser);
+        $this->current_column = xml_get_current_column_number($this->parser);
+      }
+      else{
+        $this->data = $this->data['subs'];
+      }
+      xml_parser_free($this->parser);
+    }
+  
+    function tag_open($parser, $tag, $attribs){
+      $this->datas[] = &$this->data;
+      $this->data = &$this->data['subs'][$tag][];
+      if($attribs) $this->data['attrs'] = $attribs;
+    }
+  
+    function cdata($parser, $cdata){
+      @$this->data['data'] .= $cdata;
+    }
+  
+    function tag_close($parser, $tag){
+      $this->data =& $this->datas[count($this->datas)-1];
+      array_pop($this->datas);
+    }
+
+  }
+
+?>
\ No newline at end of file