|
Posted by soldier.coder on 12/19/07 20:24
On Dec 19, 3:06 pm, "Bint" <b...@csgs.com> wrote:
> Hi,
>
> I'm trying to parse an xml file into an array tree. From the PHP site
> in the comments, I got this code. But it doesn't work for me. It's saying
> that the passed variable is not an array or object in the call end($stack),
> in the first function startElement(). Anyone know why that would be?
> $stack is an array, as far as I can tell.
>
> Thanks
> B
>
> <?php
>
> $file = "data.xml";
> $depth = 0;
> $tree = array();
> $tree['name'] = "root";
> $stack[] = &$tree;
>
> function startElement($parser, $name, $attrs) {
> global $depth;
> global $stack;
> global $tree;
>
> $element = array();
> foreach ($attrs as $key => $value) {
> $element[strtolower($key)]=$value;
> }
>
> end($stack);
> $stack[key($stack)][strtolower($name)] = &$element;
> $stack[strtolower($name)] = &$element;
>
> $depth++;
>
> }
>
> function endElement($parser, $name) {
> global $depth;
> global $stack;
>
> array_pop($stack);
> $depth--;
>
> }
>
> $xml_parser = xml_parser_create();
> xml_set_element_handler($xml_parser, "startElement", "endElement");
> if (!($fp = fopen($file, "r"))) {
> die("could not open XML input");
>
> }
>
> while ($data = fread($fp, 4096)) {
> if (!xml_parse($xml_parser, $data, feof($fp))) {
> die(sprintf("XML error: %s at line %d",
> xml_error_string(xml_get_error_code($xml_parser)),
> xml_get_current_line_number($xml_parser)));
> }}
>
> xml_parser_free($xml_parser);
> $tree = end(end($stack));
> echo "<pre>";
> print_r($tree);
> echo "</pre>";
>
> ?>
maybe its just me, but where is this function "end" set up?
[Back to original message]
|