From: Marcus Boerger Date: Sat, 29 Oct 2005 16:38:49 +0000 (+0000) Subject: - Add new example X-Git-Tag: RELEASE_2_0_1~119 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=9ee8a78cef178e65bdaf01863e54bfb1e6de0952;p=php - Add new example --- diff --git a/ext/spl/examples/xml_tree.php b/ext/spl/examples/xml_tree.php new file mode 100755 index 0000000000..ed44331e5f --- /dev/null +++ b/ext/spl/examples/xml_tree.php @@ -0,0 +1,88 @@ + [\] + * + * Simply specify the xml file to tree with parameter \. + * The second parameter allows to output a maximum of \ characters of + * the element or attribute value. + */ + +if ($argc < 2) { + echo << + +Displays a graphical tree for the elements in . + + The file for which to generate the tree graph. + 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"; +} + +?> \ No newline at end of file