root/dev/common/includes/class.xml.php @ 317

Revision 254, 1.9 KB (checked in by exi, 15 years ago)

Merging 242:253 branch into dev

Line 
1<?php
2
3class sxml
4{
5    var $parser;
6    var $error_code;
7    var $error_string;
8    var $current_line;
9    var $current_column;
10    var $data = array();
11    var $datas = array();
12
13    function parse($data)
14    {
15        $this->parser = xml_parser_create('ISO-8859-1');
16        xml_set_object($this->parser, $this);
17        xml_parser_set_option($this->parser, XML_OPTION_SKIP_WHITE, 1);
18        xml_set_element_handler($this->parser, 'tag_open', 'tag_close');
19        xml_set_character_data_handler($this->parser, 'cdata');
20
21        if (!xml_parse($this->parser, $data))
22        {
23            $this->data = array();
24            $this->error_code = xml_get_error_code($this->parser);
25            $this->error_string = xml_error_string($this->error_code);
26            $this->current_line = xml_get_current_line_number($this->parser);
27            $this->current_column = xml_get_current_column_number($this->parser);
28        }
29        else
30        {
31            $this->data = $this->data;
32        }
33        xml_parser_free($this->parser);
34
35        return $this->data;
36    }
37
38    function tag_open($parser, $tag, $attribs)
39    {
40        $this->datas[] =& $this->data;
41
42        if (isset($this->data[strtolower($tag)]))
43        {
44            if (!isset($this->data[strtolower($tag)][0]))
45            {
46                $this->data[strtolower($tag)] = array($this->data[strtolower($tag)]);
47            }
48            $this->data =& $this->data[strtolower($tag)][];
49        }
50        else
51            $this->data =& $this->data[strtolower($tag)];
52    }
53
54    function cdata($parser, $cdata)
55    {
56        if (trim($cdata) != '')
57        {
58            @$this->data .= trim($cdata);
59        }
60    }
61
62    function tag_close($parser, $tag)
63    {
64        $this->data =& $this->datas[count($this->datas)-1];
65        array_pop($this->datas);
66    }
67}
68?>
Note: See TracBrowser for help on using the browser.