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);
     }
 }
Ejemplo n.º 2
0
 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;
 }
Ejemplo n.º 3
0
 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));
     }
 }
Ejemplo n.º 4
0
Archivo: XHTML.php Proyecto: philip/phd
 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;
 }
Ejemplo n.º 5
0
 /**
  * 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;
 }
Ejemplo n.º 6
0
 /**
  * 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;
         }
     }
 }
Ejemplo n.º 7
0
 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;
 }
Ejemplo n.º 8
0
 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;
 }
Ejemplo n.º 9
0
     $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>");
Ejemplo n.º 10
0
 /**
  * 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;
 }
Ejemplo n.º 11
0
 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;
 }
Ejemplo n.º 12
0
<?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===
Ejemplo n.º 13
0
 public function moveToElement()
 {
     return parent::moveToElement();
 }