public function execute(AgaviXmlConfigDomDocument $DOM)
 {
     $DOM->setDefaultNamespace(self::$NsValidation["ns"], self::$NsValidation["key"]);
     $xpath = $DOM->getXpath();
     $nsVal = self::$NsValidation["key"];
     $nsValURI = self::$NsValidation["ns"];
     $xpath->registerNamespace(self::$NsEnvelope["key"], self::$NsEnvelope["ns"]);
     $validators = $xpath->query("//" . $nsVal . ":validators");
     $params = array();
     foreach ($validators as $val) {
         if ($val->getAttribute("method") && $val->getAttribute("method") != "write") {
             //only respect POST requests
             continue;
         }
         $validators = $xpath->query("//" . $nsVal . ":validator", $val);
         foreach ($validators as $validator) {
             $params[] = $this->parseRequestParameter($validator);
         }
     }
     return $params;
 }
 /**
  * Transforms a given document according to xml-stylesheet processing
  * instructions
  *
  * @param      AgaviXmlConfigDomDocument The document to act upon.
  * @param      string The environment name.
  * @param      string The context name.
  *
  * @return     AgaviXmlConfigDomDocument The transformed document.
  *
  * @author     David Zülke <*****@*****.**>
  * @author     Noah Fontes <*****@*****.**>
  * @since      1.0.0
  */
 public static function transformProcessingInstructions(AgaviXmlConfigDomDocument $document, $environment, $context)
 {
     $transformations = array();
     $transformationInfo = array();
     $xpath = $document->getXpath();
     // see if there are <?xml-stylesheet... processing instructions
     $stylesheetProcessingInstructions = $xpath->query("//processing-instruction('xml-stylesheet')", $document);
     foreach ($stylesheetProcessingInstructions as $pi) {
         // yes! alright. trick: we create a doc fragment with the contents so we don't have to parse things by hand...
         $fragment = $document->createDocumentFragment();
         $fragment->appendXml('<foo ' . $pi->data . ' />');
         $type = $fragment->firstChild->getAttribute('type');
         // we process only the types below...
         if (in_array($type, array('text/xml', 'text/xsl', 'application/xml', 'application/xsl+xml'))) {
             $href = $href = $fragment->firstChild->getAttribute('href');
             if (strpos($href, '#') === 0) {
                 // the href points to an embedded XSL stylesheet (with ID reference), so let's see if we can find it
                 $stylesheets = $xpath->query("//*[@id='" . substr($href, 1) . "']", $document);
                 if ($stylesheets->length) {
                     // excellent. make a new doc from that element!
                     try {
                         $xsl = new AgaviXmlConfigDomDocument();
                         $xsl->appendChild($xsl->importNode($stylesheets->item(0), true));
                     } catch (DOMException $dome) {
                         throw new AgaviParseException(sprintf('Configuration file "%s" could not be parsed: Could not load XSL stylesheet "%s": %s', $document->documentURI, $href, $dome->getMessage()));
                     }
                     // and append to the list of XSLs to process
                     // TODO: spec mandates that external XSLs be processed first!
                     $transformations[] = $xsl;
                 } else {
                     throw new AgaviParseException(sprintf('Configuration file "%s" could not be parsed because the inline stylesheet "%s" referenced in the "xml-stylesheet" processing instruction could not be found in the document.', $document->documentURI, $href));
                 }
             } else {
                 // href references an xsl file, remember the path
                 $transformationInfo[] = AgaviToolkit::expandDirectives($href);
             }
             // remove the processing instructions after we dealt with them
             $pi->parentNode->removeChild($pi);
         }
     }
     return self::transform($document, $environment, $context, $transformationInfo, $transformations);
 }