| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209 | 
							- <?php
 
- /** @file
 
-  * XML extensions. See QPXML.
 
-  */
 
- /**
 
-  * Provide QueryPath with additional XML tools.
 
-  *
 
-  * @author M Butcher <matt@aleph-null.tv>
 
-  * @author Xander Guzman <theshadow@shadowpedia.info>
 
-  * @license http://opensource.org/licenses/lgpl-2.1.php LGPL or MIT-like license.
 
-  * @see QueryPathExtension
 
-  * @see QueryPathExtensionRegistry::extend()
 
-  * @see QPXML
 
-  * @ingroup querypath_extensions
 
-  */
 
- class QPXML implements QueryPathExtension {
 
-   protected $qp;
 
-   public function __construct(QueryPath $qp) {
 
-     $this->qp = $qp;
 
-   }
 
-   public function schema($file) {
 
-     $doc = $this->qp->branch()->top()->get(0)->ownerDocument;
 
-     if (!$doc->schemaValidate($file)) {
 
-       throw new QueryPathException('Document did not validate against the schema.');
 
-     }
 
-   }
 
-   /**
 
-    * Get or set a CDATA section.
 
-    *
 
-    * If this is given text, it will create a CDATA section in each matched element,
 
-    * setting that item's value to $text.
 
-    *
 
-    * If no parameter is passed in, this will return the first CDATA section that it
 
-    * finds in the matched elements.
 
-    *
 
-    * @param string $text
 
-    *  The text data to insert into the current matches. If this is NULL, then the first
 
-    *  CDATA will be returned.
 
-    *
 
-    * @return mixed
 
-    *  If $text is not NULL, this will return a {@link QueryPath}. Otherwise, it will
 
-    *  return a string. If no CDATA is found, this will return NULL.
 
-    * @see comment()
 
-    * @see QueryPath::text()
 
-    * @see QueryPath::html()
 
-    */
 
-   public function cdata($text = NULL) {
 
-     if (isset($text)) {
 
-       // Add this text as CDATA in the current elements.
 
-       foreach ($this->qp->get() as $element) {
 
-         $cdata = $element->ownerDocument->createCDATASection($text);
 
-         $element->appendChild($cdata);
 
-       }
 
-       return $this->qp;;
 
-     }
 
-     // Look for CDATA sections.
 
-     foreach ($this->qp->get() as $ele) {
 
-       foreach ($ele->childNodes as $node) {
 
-         if ($node->nodeType == XML_CDATA_SECTION_NODE) {
 
-           // Return first match.
 
-           return $node->textContent;
 
-         }
 
-       }
 
-     }
 
-     return NULL;
 
-     // Nothing found
 
-   }
 
-   /**
 
-    * Get or set a comment.
 
-    *
 
-    * This function is used to get or set comments in an XML or HTML document.
 
-    * If a $text value is passed in (and is not NULL), then this will add a comment
 
-    * (with the value $text) to every match in the set.
 
-    *
 
-    * If no text is passed in, this will return the first comment in the set of matches.
 
-    * If no comments are found, NULL will be returned.
 
-    *
 
-    * @param string $text
 
-    *  The text of the comment. If set, a new comment will be created in every item 
 
-    *  wrapped by the current {@link QueryPath}.
 
-    * @return mixed
 
-    *  If $text is set, this will return a {@link QueryPath}. If no text is set, this
 
-    *  will search for a comment and attempt to return the string value of the first
 
-    *  comment it finds. If no comment is found, NULL will be returned.
 
-    * @see cdata()
 
-    */
 
-   public function comment($text = NULL) {
 
-     if (isset($text)) {
 
-       foreach ($this->qp->get() as $element) {
 
-         $comment = $element->ownerDocument->createComment($text);
 
-         $element->appendChild($comment);
 
-       }
 
-       return $this->qp;
 
-     }
 
-     foreach ($this->qp->get() as $ele) {
 
-       foreach ($ele->childNodes as $node) {
 
-         if ($node->nodeType == XML_COMMENT_NODE) {
 
-           // Return first match.
 
-           return $node->textContent;
 
-         }
 
-       }
 
-     }
 
-   }
 
-   /**
 
-    * Get or set a processor instruction.
 
-    */
 
-   public function pi($prefix = NULL, $text = NULL) {
 
-     if (isset($text)) {
 
-       foreach ($this->qp->get() as $element) {
 
-         $comment = $element->ownerDocument->createProcessingInstruction($prefix, $text);
 
-         $element->appendChild($comment);
 
-       }
 
-       return $this->qp;
 
-     }
 
-     foreach ($this->qp->get() as $ele) {
 
-       foreach ($ele->childNodes as $node) {
 
-         if ($node->nodeType == XML_PI_NODE) {
 
-           if (isset($prefix)) {
 
-             if ($node->tagName == $prefix) {
 
-               return $node->textContent;
 
-             }
 
-           }
 
-           else {
 
-             // Return first match.
 
-             return $node->textContent;
 
-           }
 
-         }
 
-       } // foreach
 
-     } // foreach
 
-   }
 
-   public function toXml() {
 
-       return $this->qp->document()->saveXml();
 
-   }
 
-   /**
 
-    * Create a NIL element.
 
-    *
 
-    * @param string $text
 
-    * @param string $value
 
-    * @reval object $element
 
-    */
 
-   public function createNilElement($text, $value) {
 
-     $value = ($value)? 'true':'false';
 
-     $element = $this->qp->createElement($text);
 
-     $element->attr('xsi:nil', $value);
 
-     return $element;
 
-   }
 
-   /**
 
-    * Create an element with the given namespace.
 
-    *
 
-    * @param string $text
 
-    * @param string $nsUri
 
-    *   The namespace URI for the given element.
 
-    * @retval object
 
-    */
 
-   public function createElement($text, $nsUri = null) {
 
-     if (isset ($text)) {
 
-       foreach ($this->qp->get() as $element) {
 
-         if ($nsUri === null && strpos($text, ':') !== false) {
 
-           $ns = array_shift(explode(':', $text));
 
-           $nsUri = $element->ownerDocument->lookupNamespaceURI($ns);
 
-           if ($nsUri === null) {
 
-             throw new QueryPathException("Undefined namespace for: " . $text);
 
-           }
 
-       }
 
-       $node = null;
 
-       if ($nsUri !== null) {
 
-         $node = $element->ownerDocument->createElementNS(
 
-           $nsUri,
 
-           $text
 
-         );
 
-       } else {
 
-         $node = $element->ownerDocument->createElement($text);
 
-       }
 
-         return qp($node);
 
-       }
 
-     }
 
-     return;
 
-   }
 
-   /**
 
-    * Append an element.
 
-    *
 
-    * @param string $text
 
-    * @retval object QueryPath
 
-    */
 
-   public function appendElement($text) {
 
-     if (isset ($text)) {
 
-       foreach ($this->qp->get() as $element) {
 
-         $node = $this->qp->createElement($text);
 
-         qp($element)->append($node);
 
-       }
 
-     }
 
-     return $this->qp;
 
-   }
 
- }
 
- QueryPathExtensionRegistry::extend('QPXML');
 
 
  |