Example #1
0
    public static function validateXML($string, &$errors, $encoding = 'UTF-8')
    {
        $xsl = '<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
			<xsl:template match="/"></xsl:template>
			</xsl:stylesheet>';
        $xml = trim($string);
        if (strpos($string, '<?xml') === false) {
            $xml = sprintf('<?xml version="1.0" encoding="%s"?><rootelement>%s</rootelement>', $encoding, $string);
        }
        XSLProc::transform($xml, $xsl);
        if (XSLProc::hasErrors()) {
            $errors = XSLProc::getErrors();
            return false;
        }
        return true;
    }
Example #2
0
 public static function render($e)
 {
     $xml = new DOMDocument('1.0', 'utf-8');
     $xml->formatOutput = true;
     $root = $xml->createElement('data');
     $xml->appendChild($root);
     $details = $xml->createElement('details', $e->getMessage());
     $details->setAttribute('type', $e->getType() == XSLProc::ERROR_XML ? 'XML' : $e->getFile());
     $details->setAttribute('file', General::sanitize($e->getFile()));
     $details->setAttribute('line', $e->getLine());
     $root->appendChild($details);
     $nearby_lines = self::__nearByLines($e->getLine(), $e->getFile(), $e->getType() == XSLProc::ERROR_XML, 6);
     $lines = $xml->createElement('nearby-lines');
     $markdown .= "\t" . $e->getMessage() . "\n";
     $markdown .= "\t" . $e->getFile() . " line " . $e->getLine() . "\n\n";
     foreach ($nearby_lines as $line_number => $string) {
         $markdown .= "\t{$string}";
         $string = trim(str_replace("\t", '&nbsp;&nbsp;&nbsp;&nbsp;', General::sanitize($string)));
         $item = $xml->createElement('item');
         $item->setAttribute('number', $line_number + 1);
         $cdata = $xml->createCDATASection(strlen($string) == 0 ? '&nbsp;' : $string);
         $item->appendChild($cdata);
         $lines->appendChild($item);
     }
     $root->appendChild($lines);
     $element = $xml->createElement('markdown');
     //, General::sanitize($markdown)));
     $element->appendChild($xml->createCDATASection($markdown));
     $root->appendChild($element);
     $processing_errors = $xml->createElement('processing-errors');
     if (XSLProc::getErrors() instanceof MessageStack) {
         foreach (XSLProc::getErrors() as $error) {
             $error->file = str_replace(WORKSPACE . '/', NULL, $error->file);
             $item = $xml->createElement('item', trim(General::sanitize($error->message)));
             if (strlen(trim($error->file)) == 0) {
                 $item->setAttribute('file', General::sanitize($error->file));
             }
             if (strlen(trim($error->line)) == 0) {
                 $item->setAttribute('line', $error->line);
             }
             $processing_errors->appendChild($item);
         }
     }
     $root->appendChild($processing_errors);
     return parent::__transform($xml, 'exception.xslt.xsl');
 }