ILIAS  eassessment Revision 61809
 All Data Structures Namespaces Files Functions Variables Groups Pages
class.ilSaxParser.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (c) 1998-2009 ILIAS open source, Extended GPL, see docs/LICENSE */
3 
4 
18 {
26  var $input_type = null;
27 
34  var $xml_content = '';
35 
41  var $ilias;
42 
48  var $lng;
49 
55  var $xml_file;
56 
62  var $throwException = false;
68  function ilSaxParser($a_xml_file = '', $throwException = false)
69  {
70  global $ilias, $lng;
71  if($a_xml_file)
72  {
73  $this->xml_file = $a_xml_file;
74  $this->input_type = 'file';
75  }
76 
77  $this->throwException = $throwException;
78  $this->ilias = &$ilias;
79  $this->lng = &$lng;
80  }
81 
82  function setXMLContent($a_xml_content)
83  {
84  $this->xml_content = $a_xml_content;
85  $this->input_type = 'string';
86  }
87 
88  function getXMLContent()
89  {
90  return $this->xml_content;
91  }
92 
93  function getInputType()
94  {
95  return $this->input_type;
96  }
97 
104  function startParsing()
105  {
106  $xml_parser = $this->createParser();
107  $this->setOptions($xml_parser);
108  $this->setHandlers($xml_parser);
109 
110  switch($this->getInputType())
111  {
112  case 'file':
113  $fp = $this->openXMLFile();
114  $this->parse($xml_parser,$fp);
115  break;
116 
117  case 'string':
118  $this->parse($xml_parser);
119  break;
120 
121  default:
122  $this->handleError("No input type given. Set filename in constructor or choose setXMLContent()",
123  $this->ilias->error_obj->FATAL);
124  break;
125  }
126  $this->freeParser($xml_parser);
127  }
134  function createParser()
135  {
136  $xml_parser = xml_parser_create("UTF-8");
137 
138  if($xml_parser == false)
139  {
140  $this->handleError("Cannot create an XML parser handle",$this->ilias->error_obj->FATAL);
141  }
142  return $xml_parser;
143  }
149  function setOptions($a_xml_parser)
150  {
151  xml_parser_set_option($a_xml_parser,XML_OPTION_CASE_FOLDING,false);
152  }
158  function setHandlers($a_xml_parser)
159  {
160  echo 'ilSaxParser::setHandlers() must be overwritten';
161  }
168  function openXMLFile()
169  {
170  if(!($fp = fopen($this->xml_file,'r')))
171  {
172  $this->handleError("Cannot open xml file \"".$this->xml_file."\"",$this->ilias->error_obj->FATAL);
173  }
174  return $fp;
175  }
182  function parse($a_xml_parser,$a_fp = null)
183  {
184  switch($this->getInputType())
185  {
186  case 'file':
187 
188  while($data = fread($a_fp,4096))
189  {
190  $parseOk = xml_parse($a_xml_parser,$data,feof($a_fp));
191  }
192  break;
193 
194  case 'string':
195  $parseOk = xml_parse($a_xml_parser,$this->getXMLContent());
196  break;
197  }
198  if(!$parseOk
199  && (xml_get_error_code($a_xml_parser) != XML_ERROR_NONE))
200  {
201  $errorCode = xml_get_error_code($a_xml_parser);
202  $line = xml_get_current_line_number($a_xml_parser);
203  $col = xml_get_current_column_number($a_xml_parser);
204  $this->handleError("XML Parse Error: ".xml_error_string($errorCode)." at line ".$line.", col ". $col . " (Code: ".$errorCode.")" ,$this->ilias->error_obj->FATAL);
205  }
206  return true;
207 
208  }
209 
217  protected function handleError($message, $code) {
218  if ($this->throwException) {
219  require_once ('./classes/class.ilSaxParserException.php');
220  throw new ilSaxParserException ($message, $code);
221  } else {
222  if (is_object($this->ilias))
223  {
224  $this->ilias->raiseError($message, $code);
225  }
226  else
227  {
228  die($message);
229  }
230  }
231  return false;
232  }
238  function freeParser($a_xml_parser)
239  {
240  if(!xml_parser_free($a_xml_parser))
241  {
242  $this->ilias->raiseError("Error freeing xml parser handle ",$this->ilias->error_obj->FATAL);
243  }
244  }
245 
252  {
253  $this->throwException = $throwException;
254  }
255 }
256 ?>