getPath(); $fpathlen = strlen($fpath); $res = new Tool_Result(); $cmd = 'xmllint --noout ' . escapeshellarg($fpath) . ' 2>&1'; exec($cmd, $output, $retval); if ($retval == 0) { $res->annotations['general'][] = new Tool_Result_Line( 'XML is well-formed', 'ok' ); return $res; } for ($i = 0; $i < count($output); $i += 3) { $line = $output[$i]; if (substr($line, 0, $fpathlen) != $fpath) { throw new Exception('xmllint does not behave as expected: ' . $line); } list($linenum, $msg) = explode(':', substr($line, $fpathlen + 1), 2); $res->annotations[$linenum][] = new Tool_Result_Line( $msg, 'error' ); } $res->annotations['general'][] = new Tool_Result_Line( 'XML is not well-formed', 'error' ); return $res; } } ?>