private function writeReaderImpl(XMLWriter $writer, XMLReader $reader) { switch ($reader->nodeType) { case XMLReader::ELEMENT: $writer->startElement($reader->name); if ($reader->moveToFirstAttribute()) { do { $writer->writeAttribute($reader->name, $reader->value); } while ($reader->moveToNextAttribute()); $reader->moveToElement(); } if ($reader->isEmptyElement) { $writer->endElement(); } break; case XMLReader::END_ELEMENT: $writer->endElement(); break; case XMLReader::COMMENT: $writer->writeComment($reader->value); break; case XMLReader::SIGNIFICANT_WHITESPACE: case XMLReader::TEXT: $writer->text($reader->value); break; case XMLReader::PI: $writer->writePi($reader->name, $reader->value); break; default: XMLReaderNode::dump($reader); } }
public static function generateVersionInfo($filename) { static $info; if ($info) { return $info; } if (!is_file($filename)) { v("Can't find Version information file (%s), skipping!", $filename, E_USER_WARNING); return array(); } $r = new \XMLReader(); if (!$r->open($filename)) { v("Can't open the version info file (%s)", $filename, E_USER_ERROR); } $versions = array(); while ($r->read()) { if ($r->moveToAttribute("name") && ($funcname = str_replace(array("::", "->", "__", "_", '$'), array("-", "-", "-", "-", ""), $r->value)) && $r->moveToAttribute("from") && ($from = $r->value)) { $versions[strtolower($funcname)] = $from; $r->moveToElement(); } } $r->close(); $info = $versions; return $versions; }
public function parse(\XMLReader $xmlReader, $startingDepth = 0, $parseOne = false) { if ($this->callback !== null) { $node = new Node(); $node->name = $xmlReader->name; $node->depth = $xmlReader->depth; $node->text = $xmlReader->readString(); if ($xmlReader->hasAttributes && $xmlReader->moveToFirstAttribute()) { do { $node->attributes[$xmlReader->name] = $xmlReader->value; } while ($xmlReader->moveToNextAttribute()); $xmlReader->moveToElement(); } $callback = $this->callback; $callback($this->processNode($node, $xmlReader)); } }
public static function generateVersionInfo($filename) { static $info; if ($info) { return $info; } $r = new \XMLReader(); if (!$r->open($filename)) { throw new \Exception("Could not open file for accessing version information: {$filename}"); } $versions = array(); while ($r->read()) { if ($r->moveToAttribute("name") && ($funcname = str_replace(array("::", "->", "__", "_", '$'), array("-", "-", "-", "-", ""), $r->value)) && $r->moveToAttribute("from") && ($from = $r->value)) { $versions[strtolower($funcname)] = $from; $r->moveToElement(); } } $r->close(); $info = $versions; return $versions; }
/** * Returns the given node's attributes as an associative array * * @param \XMLReader $reader * * @return array */ protected function getAttributes(\XMLReader $reader) { if (!$reader->hasAttributes) { return array(); } $attributes = array(); $reader->moveToFirstAttribute(); do { $attributes[($reader->prefix ? $reader->prefix . ':' : '') . $reader->localName] = $reader->value; } while ($reader->moveToNextAttribute()); $reader->moveToElement(); return $attributes; }
/** * Traverse XML tree * * Traverses the XML tree and calls the learnAutomaton() method for each * element, with its child element nodes. * * @param DOMNode $root * @return void */ protected function traverse(XMLReader $reader, $path = array()) { $contents = array(); $whitespace = array(); $children = array(); $attributes = array(); // Learn attributes for this element while ($reader->moveToNextAttribute()) { $attributes[$reader->name] = $reader->value; } $reader->moveToElement(); // If this is an empty element, do not traverse, but return // immediately. if ($reader->nodeType === XMLReader::ELEMENT && $reader->isEmptyElement) { $element = $this->getType($path); $this->learnAutomaton($element, $children); $this->learnSimpleType($element, $contents); $this->learnAttributes($element, $attributes); return; } // Traverse child elements. while ($reader->read()) { switch ($reader->nodeType) { case XMLReader::ELEMENT: // Opening tag $child = array('namespace' => $reader->namespaceURI, 'name' => $reader->localName, 'parents' => $path); $children[] = $child; $childPath = array_merge($path, array($child)); // If we are in the document root, add the child as root // element. if (count($path) === 0) { $this->rootElements[$child['name']] = $this->inferenceType($childPath); } $this->traverse($reader, $childPath); break; case XMLReader::END_ELEMENT: // Closing tag $element = $this->getType($path); if (!count($children)) { // Significant whitespace seems only significant if // there are children, but there is still some // whitespace. $contents = array_merge($contents, $whitespace); } $this->learnAutomaton($element, $children); $this->learnSimpleType($element, $contents); $this->learnAttributes($element, $attributes); return; case XMLReader::TEXT: case XMLReader::CDATA: // Text content $contents[] = $reader->value; break; case XMLReader::SIGNIFICANT_WHITESPACE: $whitespace[] = $reader->value; break; } } }
private function getAttributes(XMLReader $xml, $attrsLists = 'all') { $attrs = array(); if (is_array($attrsLists)) { foreach ($attrsLists as $attr) { $attrs[$attr] = $xml->getAttribute($attr); } } else { if ($attrsLists == 'all') { while ($xml->moveToNextAttribute()) { $attrs[$xml->name] = $xml->value; } } } // return the reader to the original Element $xml->moveToElement(); return $attrs; }
public static function generateVersionInfo($filename) { static $info; if ($info) { return $info; } $r = new \XMLReader(); if (!$r->open($filename)) { throw new \Exception(); } $versions = array(); while ($r->read()) { if ($r->moveToAttribute('name') && ($funcname = str_replace(array('::', '->', '__', '_', '$'), array('-', '-', '-', '-', ''), $r->value)) && $r->moveToAttribute('from') && ($from = $r->value)) { $versions[strtolower($funcname)] = $from; $r->moveToElement(); } } $r->close(); $info = $versions; return $versions; }
$affectedProducts .= mysql_prep($reader->value); $affectedProducts .= mysql_prep("<br>"); } if ($reader->nodeType == XMLReader::END_ELEMENT && $reader->name == "affectedProducts" && $isAdvisory == "true") { $isAffectedProducts = "false"; $affectedProducts = addslashes($affectedProducts); } /*REFERENCES - LINKS*/ if ($reader->nodeType == XMLReader::ELEMENT && $reader->name == "references" && $isAdvisory == "true") { $isReferences = "true"; } if ($reader->nodeType == XMLReader::ELEMENT && $reader->name == "link" && $isReferences == "true") { $reader->moveToAttribute('target'); $linkTarget .= mysql_prep($reader->value); $linkTarget .= ","; $reader->moveToElement(); $reader->read(); $linkName .= mysql_prep($reader->value); $linkName .= ","; } if ($reader->nodeType == XMLReader::END_ELEMENT && $reader->name == "references" && $isReferences == "true") { $isReferences = "false"; $linkName = mysql_prep($linkName); $linkTarget = mysql_prep($linkTarget); } /*FIX RECOMMENDATION*/ if ($reader->nodeType == XMLReader::ELEMENT && $reader->name == "fixRecommendation" && $isAdvisory == "true") { $isFixRecommendation = "true"; $reader->moveToAttribute('type'); $fixRecommendation_type = mysql_prep($reader->value); $fixRecommendation = mysql_prep("<p>");
/** * Parses the input code and returns the OPT XML tree. * * @param String $filename The file name (for debug purposes) * @param String &$code The code to parse * @return Opt_Xml_Root */ public function parse($filename, &$code) { $debug = array(XMLReader::NONE => 'NONE', XMLReader::ELEMENT => 'ELEMENT', XMLReader::ATTRIBUTE => 'ATTRIBUTE', XMLReader::TEXT => 'TEXT', XMLReader::CDATA => 'CDATA', XMLReader::ENTITY_REF => 'ENTITY_REF', XMLReader::ENTITY => 'ENTITY', XMLReader::PI => 'PI', XMLReader::COMMENT => 'COMMENT', XMLReader::DOC => 'DOC', XMLReader::DOC_TYPE => 'DOC_TYPE', XMLReader::DOC_FRAGMENT => 'DOC_FRAGMENT', XMLReader::NOTATION => 'NOTATION', XMLReader::WHITESPACE => 'WHITESPACE', XMLReader::SIGNIFICANT_WHITESPACE => 'SIGNIFICANT_WHITESPACE', XMLReader::END_ELEMENT => 'END_ELEMENT', XMLReader::END_ENTITY => 'END_ENTITY', XMLReader::XML_DECLARATION => 'XML_DECLARATION'); libxml_use_internal_errors(true); $reader = new XMLReader(); $reader->xml($code); // $reader->setParserProperty(XMLReader::LOADDTD, true); // $reader->setParserProperty(XMLReader::VALIDATE, true); $reader->setParserProperty(XMLReader::SUBST_ENTITIES, true); $root = $current = new Opt_Xml_Root(); $firstElementMatched = false; $depth = 0; // Thanks, Oh Great PHP for your excellent WARNINGS!!! >:( while (@$reader->read()) { if ($reader->depth < $depth) { $current = $current->getParent(); } elseif ($reader->depth > $depth) { $current = $optNode; } // Opl_Debug::write($debug[$reader->nodeType].': '.$reader->name.', '.$reader->value); switch ($reader->nodeType) { // XML elements case XMLReader::ELEMENT: $optNode = new Opt_Xml_Element($reader->name); // Parse element attributes, if you manage to get there if ($reader->moveToFirstAttribute()) { do { // "xmlns" special namespace must be handler somehow differently. if ($reader->prefix == 'xmlns') { $ns = str_replace('xmlns:', '', $reader->name); $root->addNamespace($ns, $reader->value); // Let this attribute to appear, if it does not represent an OPT special // namespace if (!$this->_compiler->isNamespace($ns)) { $optAttribute = new Opt_Xml_Attribute($reader->name, $reader->value); $optNode->addAttribute($optAttribute); } } else { $optAttribute = new Opt_Xml_Attribute($reader->name, $reader->value); $optNode->addAttribute($optAttribute); } } while ($reader->moveToNextAttribute()); $reader->moveToElement(); } // Set "rootNode" flag if (!$firstElementMatched) { $optNode->set('rootNode', true); $firstElementMatched = true; } // Set "single" flag if ($reader->isEmptyElement) { $optNode->set('single', true); } $current->appendChild($optNode); break; case XMLReader::TEXT: $this->_treeTextCompile($current, $reader->value); break; case XMLReader::COMMENT: $optNode = new Opt_Xml_Comment($reader->value); $current->appendChild($optNode); break; case XMLReader::CDATA: $cdata = new Opt_Xml_Cdata($reader->value); $cdata->set('cdata', true); if ($current instanceof Opt_Xml_Text) { $current->appendChild($cdata); } else { $text = new Opt_Xml_Text(); $text->appendChild($cdata); $current->appendChild($text); $current = $text; } break; /* case XMLReader::SIGNIFICANT_WHITESPACE: $cdata = new Opt_Xml_Cdata($reader->value); $cdata->set('cdata', true); if($current instanceof Opt_Xml_Text) { $current->appendChild($cdata); } else { $text = new Opt_Xml_Text(); $text->appendChild($cdata); $current->appendChild($text); $current = $text; } break; */ } $depth = $reader->depth; } // Error checking $errors = libxml_get_errors(); if (sizeof($errors) > 0) { libxml_clear_errors(); foreach ($errors as $error) { echo $error->message . ' (' . $error->line . ')<br/>'; } } return $root; }
protected static function generateDeprecatedInfo($filename) { static $info; if ($info) { return $info; } if (!is_file($filename)) { v("Can't find Version information file (%s), skipping!", $filename, E_USER_WARNING); return array(); } $r = new \XMLReader(); if (!$r->open($filename)) { v("Can't open the version info file (%s)", $filename, E_USER_ERROR); } $deprecated = array(); while ($r->read()) { if ($r->moveToAttribute("name") && ($funcname = str_replace(array("::", "->", "__", "_", '$'), array("_", "_", "_", "_", ""), $r->value)) && $r->moveToAttribute("deprecated") && ($value = $r->value)) { $deprecated[strtolower($funcname)] = $value; $r->moveToElement(); } } $r->close(); $info = $deprecated; return $deprecated; }
<?php /* $Id$ */ $xmlstring = '<?xml version="1.0" encoding="UTF-8"?> <books><book num="1"></book><test /></books>'; $reader = new XMLReader(); $reader->XML($xmlstring); // 2 read to get on the 2nd node $reader->read(); $reader->read(); if ($reader->nodeType != XMLREADER::END_ELEMENT) { if ($reader->nodeType == XMLREADER::ELEMENT && $reader->hasAttributes) { $attr = $reader->moveToFirstAttribute(); if ($reader->moveToElement()) { if ($reader->name == 'book') { echo "ok\n"; } } } } $reader->close(); ?> ===DONE===
public function moveToElement() { return parent::moveToElement(); }