helly           Sat Oct 29 12:38:49 2005 EDT

  Added files:                 
    /php-src/ext/spl/examples   xml_tree.php 
  Log:
  - Add new example
  

http://cvs.php.net/co.php/php-src/ext/spl/examples/xml_tree.php?r=1.1&p=1
Index: php-src/ext/spl/examples/xml_tree.php
+++ php-src/ext/spl/examples/xml_tree.php
<?php

/** @file   xml_tree.php
 * @brief   XML Tree example
 * @ingroup Examples
 * @author  Marcus Boerger
 * @date    2003 - 2005
 * @version 1.0
 *
 * Usage: php xml_tree.php \<file\> [\<len\>]
 *
 * Simply specify the xml file to tree with parameter \<file\>.
 * The second parameter allows to output a maximum of \<len\> characters of
 * the element or attribute value.
 */

if ($argc < 2) {
        echo <<<EOF
Usage: php ${_SERVER['PHP_SELF']} <file>

Displays a graphical tree for the elements in <file>.

<file> The file for which to generate the tree graph.
<len>  Max length to display for attribute and element content (default: 0).


EOF;
        exit(1);
}

if (!class_exists("RecursiveTreeIterator", false)) 
require_once("recursivetreeiterator.inc");

class SimpleXmlStructure extends AppendIterator implements RecursiveIterator
{
        function __construct($xml)
        {
                parent::__construct();
                $xml = is_object($xml) ? $xml : $xml = 
simplexml_load_file($xml, 'SimpleXmlIterator');
                $this->append($xml);
                $this->append($xml->attributes());
        }

        function key()
        {
                return ($this->getIteratorIndex() ? '@' : '') . parent::key();
        }

        function hasChildren()
        {
                return $this->getInnerIterator()->hasChildren()
                        || !$this->getIteratorIndex();
        }

        function getChildren()
        {
                $inner = $this->getInnerIterator();
                return $this->getIteratorIndex()
                     ? $inner->getChildren()
                     : new SimpleXmlStructure($inner->getChildren());
        }
        
        function current()
        {
                global $len;
                
                if ($len)
                {
                        $val = substr(parent::current(), 0, $len);
                        $nws = preg_replace("/([\r\n]|\s\s+)/e", " ", $val);
                        return ($this->getIteratorIndex() ? '= ' : ': ') . $nws;
                }
                else
                {
                        return '';
                }
        }
}

$xml = new SimpleXmlStructure($argv[1]);
$it  = new RecursiveTreeIterator($xml, RecursiveTreeIterator::BYPASS_CURRENT);
$len = isset($argv[2]) ? $argv[2] : 0;

foreach($it as $c=>$v)
{
        echo "$c$v\n";
}

?>

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to