/** * debug utility method * * @param XMLReader $reader * @param bool $return (optional) prints by default but can return string * @return string|null */ public static function dump(XMLReader $reader, $return = FALSE) { $node = new self($reader); $nodeType = $reader->nodeType; $nodeName = $node->getNodeTypeName(); $extra = ''; if ($reader->nodeType === XMLReader::ELEMENT) { $extra = '<' . $reader->name . '> '; $extra .= sprintf("(isEmptyElement: %s) ", $reader->isEmptyElement ? 'Yes' : 'No'); } if ($reader->nodeType === XMLReader::END_ELEMENT) { $extra = '</' . $reader->name . '> '; } if ($reader->nodeType === XMLReader::ATTRIBUTE) { $str = $reader->value; $len = strlen($str); if ($len > 20) { $str = substr($str, 0, 17) . '...'; } $str = strtr($str, array("\n" => '\\n')); $extra = sprintf('%s = (%d) "%s" ', $reader->name, strlen($str), $str); } if ($reader->nodeType === XMLReader::TEXT || $reader->nodeType === XMLReader::WHITESPACE || $reader->nodeType === XMLReader::SIGNIFICANT_WHITESPACE) { $str = $reader->readString(); $len = strlen($str); if ($len > 20) { $str = substr($str, 0, 17) . '...'; } $str = strtr($str, array("\n" => '\\n')); $extra = sprintf('(%d) "%s" ', strlen($str), $str); } $label = sprintf("(#%d) %s %s", $nodeType, $nodeName, $extra); if ($return) { return $label; } printf("%s%s\n", str_repeat(' ', $reader->depth), $label); return null; }