23 define(
'XML_PARSER_SOURCE_ENCODING', 
Config::getVar(
'i18n', 
'client_charset'));
 
   24 define(
'XML_PARSER_TARGET_ENCODING', 
Config::getVar(
'i18n', 
'client_charset'));
 
   26 import(
'lib.pkp.classes.xml.XMLParserDOMHandler');
 
   40       $this->errors = array();
 
   46       if (!isset($this->handler)) {
 
   52       xml_set_object($parser, $this->handler);
 
   53       xml_set_element_handler($parser, 
"startElement", 
"endElement");
 
   54       xml_set_character_data_handler($parser, 
"characterData");
 
   56       if (!xml_parse($parser, $text, 
true)) {
 
   57          $this->
addError(xml_error_string(xml_get_error_code($parser)));
 
   60       $result = $this->handler->getResult();
 
   74    function parse($file) {
 
   77       if (!isset($this->handler)) {
 
   83       xml_set_object($parser, $this->handler);
 
   84       xml_set_element_handler($parser, 
"startElement", 
"endElement");
 
   85       xml_set_character_data_handler($parser, 
"characterData");
 
   87       if (!$stream = $this->
_getStream($file)) 
return false;
 
   89       while (($data = $stream->read(16384)) !== 
'') {
 
   90          if (!xml_parse($parser, $data, $stream->eof())) {
 
   91             $this->
addError(xml_error_string(xml_get_error_code($parser)));
 
   96       $result = $this->handler->getResult();
 
  109    protected function _getStream($filenameOrUrl) {
 
  110       $urlPieces = parse_url($filenameOrUrl);
 
  111       if ($urlPieces && isset($urlPieces[
'scheme'])) {
 
  114          $response = $client->request(
'GET', $filenameOrUrl);
 
  116       } elseif (file_exists($filenameOrUrl) && is_readable($filenameOrUrl)) {
 
  117          $resource = fopen($filenameOrUrl, 
'r');
 
  128       array_push($this->errors, $error);
 
  144       return empty($this->errors);
 
  164       $result = xml_parse_into_struct($parser, $text, $values, $tags);
 
  166       if (!$result) 
return null;
 
  170       foreach ($tags as $key => $indices) {
 
  171          if (!empty($tagsToMatch) && !in_array($key, $tagsToMatch)) {
 
  175          $data[$key] = array();
 
  177          foreach ($indices as $index) {
 
  178             if (!isset($values[$index][
'type']) || ($values[$index][
'type'] != 
'open' && $values[$index][
'type'] != 
'complete')) {
 
  182             $data[$key][] = array(
 
  183                'attributes' => isset($values[$index][
'attributes']) ? $values[$index][
'attributes'] : array(),
 
  184                'value' => isset($values[$index][
'value']) ? $values[$index][
'value'] : 
'' 
  199    function parseStruct($file, $tagsToMatch = array()) {
 
  201       $fileContents = $stream->getContents();
 
  202       if (!$fileContents) {
 
  213       $parser = xml_parser_create(XML_PARSER_SOURCE_ENCODING);
 
  214       xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, XML_PARSER_TARGET_ENCODING);
 
  215       xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 
false);
 
  224       xml_parser_free($parser);