[\] * * 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"); /** @ingroup Examples * @brief Generates a structure for a XML file * @version 1.0 */ class SimpleXmlStructure extends AppendIterator implements RecursiveIterator { /** @param xml object of class SimpleXmlStructure or XML file name to open. */ 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"; } ?>