function xmlParser() { $this->xml_obj = xml_parser_create(); xml_set_object($this->xml_obj, $this); xml_set_character_data_handler($this->xml_obj, 'dataHandler'); xml_set_element_handler($this->xml_obj, "startHandler", "endHandler"); }
/** * Constructs FormFilter * @access public */ function __construct() { $this->parser = xml_parser_create(); xml_set_object($this->parser, $this); xml_set_element_handler($this->parser, 'open', 'close'); xml_set_character_data_handler($this->parser, 'data'); }
public function parse($xml_or_arr) { if (is_array($xml_or_arr)) { $output = array(); foreach ($xml_or_arr as $val) { $to = $this->parse($val); $output = array_merge($output, $to); } return $output; } // echo '<h1>xml in parser:</h1><pre>'; print_r($xml); echo '</pre>'; // if we don't start with a processing instruction, // we add an outer node just to ensure it's a valid xml document // (i.e. only a single root node) if (substr($xml_or_arr, 0, 2) != '<?') { $xml_or_arr = "<{$this->insertedNode}>" . $xml_or_arr . "</{$this->insertedNode}>"; } $this->parser = xml_parser_create(); xml_set_object($this->parser, $this); xml_set_element_handler($this->parser, "tagOpen", "tagClosed"); xml_parser_set_option($this->parser, XML_OPTION_CASE_FOLDING, 0); xml_parser_set_option($this->parser, XML_OPTION_SKIP_WHITE, 1); xml_set_character_data_handler($this->parser, "tagData"); $this->xmldata = xml_parse($this->parser, $xml_or_arr); if (!$this->xmldata) { die(sprintf("XML error: %s at line %d", xml_error_string(xml_get_error_code($this->parser)), xml_get_current_line_number($this->parser))); } xml_parser_free($this->parser); $this->parseCompleted(); return $this->output; }
/** * Set handlers * * @access public * @param resource xml_parser instance * */ public function setHandlers($a_xml_parser) { xml_set_object($a_xml_parser, $this); xml_set_element_handler($a_xml_parser, 'handlerBeginTag', 'handlerEndTag'); xml_set_character_data_handler($a_xml_parser, 'handlerCharacterData'); return; }
function __construct() { $this->xml = xml_parser_create(); xml_set_object($this->xml, $this); xml_set_character_data_handler($this->xml, 'dataHandler'); xml_set_element_handler($this->xml, 'startHandler', 'endHandler'); }
function __construct($charset = 'UTF-8') { $this->conf = array(); $this->conf['error'] = '<br /><strong>Error on line %s of ' . __FILE__ . '</strong>: %s<br />'; $this->conf['cache_path'] = dirname(__FILE__); $this->conf['cache_time'] = 180; $this->conf['debug_mode'] = true; $this->conf['fetch_mode'] = ONYX_FETCH_ASSOC; if (!function_exists('xml_parser_create')) { $this->raiseError(__LINE__ - 2, ONYX_ERR_NO_PARSER); return false; } if ($charset == 'native') { $charset = LANG_CHARSET; } $this->parser = @xml_parser_create($charset); if (!is_resource($this->parser)) { $this->raiseError(__LINE__ - 3, ONYX_ERR_NO_PARSER); return false; } xml_set_object($this->parser, $this); xml_parser_set_option($this->parser, XML_OPTION_CASE_FOLDING, false); @xml_parser_set_option($this->parser, XML_OPTION_TARGET_ENCODING, LANG_CHARSET); xml_set_element_handler($this->parser, 'tag_open', 'tag_close'); xml_set_character_data_handler($this->parser, 'cdata'); }
function parse($xml) { $this->result = array(); $this->context = $xml; $this->currentTag = ''; $this->currentState = array(); $this->xmlParser = xml_parser_create(); xml_parser_set_option($this->xmlParser, XML_OPTION_TARGET_ENCODING, "UTF-8") . xml_set_object($this->xmlParser, $this); xml_set_element_handler($this->xmlParser, 'startElement', 'endElement'); xml_set_character_data_handler($this->xmlParser, 'content'); $this->trigger('before:import'); try { if (!xml_parse($this->xmlParser, $xml)) { $this->xmlParserError = 'Line ' . xml_get_current_line_number($this->xmlParser) . ': ' . (xml_get_error_code($this->xmlParser) ? xml_error_string(xml_get_error_code($this->xmlParser)) : 'Unknown error'); } } catch (Exception $e) { $this->xmlParserError = $e->getMessage(); } xml_parser_free($this->xmlParser); if ($this->xmlParserError) { $this->raiseError($this->xmlParserError); } else { if ($this->getCurrentState()) { $this->raiseError('Wrong ending state: ' . $this->getCurrentState()); } else { } } $this->trigger('after:import'); return $this->result; }
public function fetch() { $this->query = $this->url . '?pid=' . $this->pid . '&noredirect=true&format=unixref&id=doi%3A' . $this->doi; $request_options = array('method' => 'POST'); $result = drupal_http_request($this->query, $request_options); if ($result->code != 200) { drupal_set_message(t('HTTP error: !error when trying to contact crossref.org for XML input', array('!error' => $result->code)), 'error'); return; } if (empty($result->data)) { drupal_set_message(t('Did not get any data from crossref.org'), 'error'); return; } $sxml = @simplexml_load_string($result->data); if ($error = (string) $sxml->doi_record->crossref->error) { drupal_set_message($error, 'error'); return; } $this->nodes = array(); $this->parser = drupal_xml_parser_create($result->data); // use case-folding so we are sure to find the tag in xml_parser_set_option($this->parser, XML_OPTION_CASE_FOLDING, FALSE); xml_parser_set_option($this->parser, XML_OPTION_SKIP_WHITE, TRUE); xml_set_object($this->parser, $this); xml_set_element_handler($this->parser, 'unixref_startElement', 'unixref_endElement'); xml_set_character_data_handler($this->parser, 'unixref_characterData'); if (!xml_parse($this->parser, $result->data)) { drupal_set_message(sprintf("XML error: %s at line %d", xml_error_string(xml_get_error_code($this->parser)), xml_get_current_line_number($this->parser)), 'error'); } xml_parser_free($this->parser); return $this->node; }
public function __construct($input, $maxDepth = 20) { if (!is_string($input)) { throw new XmlToArrayException('No valid input.'); } $this->_maxDepth = $maxDepth; $XMLParser = xml_parser_create(); xml_parser_set_option($XMLParser, XML_OPTION_SKIP_WHITE, false); xml_parser_set_option($XMLParser, XML_OPTION_CASE_FOLDING, false); xml_parser_set_option($XMLParser, XML_OPTION_TARGET_ENCODING, 'UTF-8'); xml_set_character_data_handler($XMLParser, array($this, '_contents')); xml_set_default_handler($XMLParser, array($this, '_default')); xml_set_element_handler($XMLParser, array($this, '_start'), array($this, '_end')); xml_set_external_entity_ref_handler($XMLParser, array($this, '_externalEntity')); xml_set_notation_decl_handler($XMLParser, array($this, '_notationDecl')); xml_set_processing_instruction_handler($XMLParser, array($this, '_processingInstruction')); xml_set_unparsed_entity_decl_handler($XMLParser, array($this, '_unparsedEntityDecl')); if (!xml_parse($XMLParser, $input, true)) { $errorCode = xml_get_error_code($XMLParser); $message = sprintf('%s. line: %d, char: %d' . ($this->_tagStack ? ', tag: %s' : ''), xml_error_string($errorCode), xml_get_current_line_number($XMLParser), xml_get_current_column_number($XMLParser) + 1, implode('->', $this->_tagStack)); xml_parser_free($XMLParser); throw new XmlToArrayException($message, $errorCode); } xml_parser_free($XMLParser); }
protected function load() { global $zf_opmlItems, $zf_opmlMode; /* default values for parsing this opml file */ $zf_opmlItems = array(); $xml_parser = xml_parser_create(); xml_set_element_handler($xml_parser, "zf_opmlStartElement", "zf_opmlEndElement"); zf_debug('Opening file ' . $this->opmlfilename, DBG_OPML); @($fp = fopen($this->opmlfilename, "r")); $data = ""; if ($fp) { $data = fread($fp, filesize($this->opmlfilename)); fclose($fp); $xmlResult = xml_parse($xml_parser, $data); $xmlError = xml_error_string(xml_get_error_code($xml_parser)); $xmlCrtline = xml_get_current_line_number($xml_parser); xml_parser_free($xml_parser); unset($data); if ($xmlResult) { $this->subscriptions = $zf_opmlItems; unset($zf_opmlItems); } else { $this->lastError = "Error parsing subscriptions file <br />error: {$xmlError} at line: {$xmlCrtline}"; zf_debug("{$xmlError} at line: {$xmlCrtline}", DBG_OPML); return false; } } else { $this->lastError = 'Error opening the subscriptions file!'; return false; } $this->_sanitize(); return true; }
function parseFile($fileLocation) { // reset it. $this->_docType = NULL; $this->_nameSpace = NULL; $this->_errors = NULL; $fp = @fopen($fileLocation, 'r'); if ($fp) { $parser = xml_parser_create('ISO-8859-1'); xml_set_object($parser, $this); xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, FALSE); xml_set_element_handler($parser, "_startElement", "_endElement"); while ($data = fread($fp, 1024)) { if (strlen($this->_docType) > 0) { break; } if (!xml_parse($parser, $data, feof($fp))) { $error = xml_error_string(xml_get_error_code($parser)); break; } } xml_parser_free($parser); @fclose(fp); return TRUE; } else { $this->_errors[] = 'File ' . $fileLocation . ' could not be opened.'; return FALSE; } }
function fetch($raw_xml, $final = true) { $this->log .= 'fetch() called.' . PHP_EOL; $this->log .= 'Raw XML:' . PHP_EOL . $raw_xml . PHP_EOL . PHP_EOL; $this->index = 0; $this->data = new stdClass(); $this->stack = array(); $this->stack[] =& $this->data; $this->parser = xml_parser_create('UTF-8'); xml_set_object($this->parser, $this); xml_set_element_handler($this->parser, 'tag_open', 'tag_close'); xml_set_character_data_handler($this->parser, 'cdata'); xml_parser_set_option($this->parser, XML_OPTION_TARGET_ENCODING, 'UTF-8'); xml_parser_set_option($this->parser, XML_OPTION_SKIP_WHITE, 1); xml_parser_set_option($this->parser, XML_OPTION_CASE_FOLDING, false); $start = 0; $length = strlen($raw_xml); $chunk_size = 32 * 1024 * 1024; $ret = true; while (true) { if (!($parsed_xml = xml_parse($this->parser, substr($raw_xml, $start, $chunk_size), $final = ($start += $chunk_size) >= $length ? true : false))) { $this->log .= $ret = sprintf('XML error: %s at line %d.', xml_error_string(xml_get_error_code($this->parser)), xml_get_current_line_number($this->parser)); break; } else { if ($final) { break; } } } xml_parser_free($this->parser); return $ret; }
function AbstractSAXParser() { // create a parser $this->parserResource = xml_parser_create(); if (isset($this->parserResource)) { // allowing object instance to use the xml parser xml_set_object($this->parserResource, $this); // set tag event handler xml_set_element_handler($this->parserResource, "startTagElement", "endTagElement"); // set CDATA event handler xml_set_character_data_handler($this->parserResource, "cdataElement"); // set processing instruction handler xml_set_processing_instruction_handler($this->parserResource, "instructionElement"); // set undeclare entity xml_set_unparsed_entity_decl_handler($this->parserResource, "undeclaredEntityElement"); // set notation delcaration handler xml_set_notation_decl_handler($this->parserResource, "notationDeclarationElement"); // set external entity handler xml_set_external_entity_ref_handler($this->parserResource, "externalEntityElement"); // seat default parser option xml_parser_set_option($this->parserResource, XML_OPTION_SKIP_WHITE, 1); xml_parser_set_option($this->parserResource, XML_OPTION_CASE_FOLDING, 0); xml_parser_set_option($this->parserResource, XML_OPTION_TARGET_ENCODING, 'UTF-8'); } }
public function replaceTranslation() { //write xml header fwrite($this->outputFP, '<?xml version="1.0" encoding="UTF-8"?>'); //create parser $xml_parser = xml_parser_create('UTF-8'); //configure parser //pass this object to parser to make its variables and functions visible inside callbacks xml_set_object($xml_parser, $this); //avoid uppercasing all tags name xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, false); //define callbacks for tags xml_set_element_handler($xml_parser, "tagOpen", "tagClose"); //define callback for data xml_set_character_data_handler($xml_parser, "characterData"); //read a chunk of text while ($this->currentBuffer = fread($this->originalFP, 4096)) { /* preprocess file */ // obfuscate entities because sax automatically does html_entity_decode $temporary_check_buffer = preg_replace("/&(.*?);/", '#%$1#%', $this->currentBuffer); $lastByte = $temporary_check_buffer[strlen($temporary_check_buffer) - 1]; //avoid cutting entities in half: //the last fread could have truncated an entity (say, '<' in '&l'), thus invalidating the escaping //***** and if there is an & that it is not an entity, this is an infinite loop !!!!! $escape_AMP = false; // 9 is the max length of an entity. So, suppose that the & is at the end of buffer, // add 9 Bytes and substitute the entities, if the & is present and it is not at the end //it can't be a entity, exit the loop while (true) { $_ampPos = strpos($temporary_check_buffer, '&'); //check for real entity or escape it to safely exit from the loop!!! if ($_ampPos === false || strlen(substr($temporary_check_buffer, $_ampPos)) > 9) { $escape_AMP = true; break; } //if an entity is still present, fetch some more and repeat the escaping $this->currentBuffer .= fread($this->originalFP, 9); $temporary_check_buffer = preg_replace("/&(.*?);/", '#%$1#%', $this->currentBuffer); } //free stuff outside the loop unset($temporary_check_buffer); $this->currentBuffer = preg_replace("/&(.*?);/", '#%$1#%', $this->currentBuffer); if ($escape_AMP) { $this->currentBuffer = str_replace("&", '#%amp#%', $this->currentBuffer); } //get lenght of chunk $this->len = strlen($this->currentBuffer); //parse chunk of text if (!xml_parse($xml_parser, $this->currentBuffer, feof($this->originalFP))) { //if unable, die die(sprintf("XML error: %s at line %d", xml_error_string(xml_get_error_code($xml_parser)), xml_get_current_line_number($xml_parser))); } //get accumulated this->offset in document: as long as SAX pointer advances, we keep track of total bytes it has seen so far; this way, we can translate its global pointer in an address local to the current buffer of text to retrieve last char of tag $this->offset += $this->len; } //close parser xml_parser_free($xml_parser); }
function XMLToArray($data, $ignore = array(), $replace = array(), $showattribs = false, $toupper = false) { $this->_showAttribs = $showattribs; $this->_parser = xml_parser_create(); xml_set_object($this->_parser, $this); if ($toupper) { foreach ((array) $ignore as $key => $value) { $this->_ignore[strtoupper($key)] = strtoupper($value); } foreach ((array) $replace as $key => $value) { $this->_replace[strtoupper($key)] = strtoupper($value); } xml_parser_set_option($this->_parser, XML_OPTION_CASE_FOLDING, true); } else { $this->_ignore =& $ignore; $this->_replace =& $replace; xml_parser_set_option($this->_parser, XML_OPTION_CASE_FOLDING, false); } xml_set_element_handler($this->_parser, '_startElement', '_endElement'); xml_set_character_data_handler($this->_parser, '_cdata'); $this->_data = array(); $this->_level = 0; if (!xml_parse($this->_parser, $data, true)) { //new Error("XML Parse Error: ".xml_error_string(xml_get_error_code($this->_parser))."n on line: ".xml_get_current_line_number($this->_parser),true); return false; } xml_parser_free($this->_parser); }
public function xml() { $this->parser = xml_parser_create(); xml_parser_set_option($this->parser, XML_OPTION_CASE_FOLDING, false); xml_set_object($this->parser, $this); xml_set_element_handler($this->parser, 'open','close'); xml_set_character_data_handler($this->parser, 'data'); }
/** * Load translation data (TMX file reader) * * @param string $filename TMX file to add, full path must be given for access * @param string $locale Locale has no effect for TMX because TMX defines all languages within * the source file * @param array $option OPTIONAL Options to use * @throws Zend_Translation_Exception */ protected function _loadTranslationData($filename, $locale, array $options = array()) { $options = array_merge($this->_options, $options); if ($options['clear']) { $this->_translate = array(); } if (in_array('defined_language', $options) and !empty($options['defined_language'])) { $this->_defined = true; } if (!is_readable($filename)) { require_once 'Zend/Translate/Exception.php'; throw new Zend_Translate_Exception('Translation file \'' . $filename . '\' is not readable.'); } $this->_file = xml_parser_create(); xml_set_object($this->_file, $this); xml_parser_set_option($this->_file, XML_OPTION_CASE_FOLDING, 0); xml_set_element_handler($this->_file, "_startElement", "_endElement"); xml_set_character_data_handler($this->_file, "_contentElement"); if (!xml_parse($this->_file, file_get_contents($filename))) { $ex = sprintf('XML error: %s at line %d', xml_error_string(xml_get_error_code($this->_file)), xml_get_current_line_number($this->_file)); xml_parser_free($this->_file); require_once 'Zend/Translate/Exception.php'; throw new Zend_Translate_Exception($ex); } }
function load($xml_file) { $this->_path = dirname($xml_file); if (!file_exists($xml_file)) { return; } $fp = @fopen($xml_file, "r"); if ($fp) { $data = ''; while (!feof($fp)) { $data .= fread($fp, 8192); } fclose($fp); if (ini_get("magic_quotes_gpc")) { $data = stripslashes($data); } } $this->_parser = xml_parser_create('UTF-8'); xml_set_object($this->_parser, $this); xml_set_element_handler($this->_parser, "_saxStartElement", "_saxEndElement"); xml_parser_set_option($this->_parser, XML_OPTION_TARGET_ENCODING, "UTF-8"); if (!xml_parse($this->_parser, $data, true)) { trigger_error(sprintf("Language pack loading failed, XML error: %s at line %d.", xml_error_string(xml_get_error_code($this->_parser)), xml_get_current_line_number($this->_parser)), E_USER_ERROR); } xml_parser_free($this->_parser); }
/** * Run the loader, to load up field-restrictions from the XML file. * * @param string The default breadcrumbs * @param string The breadcrumb XML data */ function go($current_breadcrumbs, $data) { $this->tag_stack = array(); $this->attribute_stack = array(); $this->substitution_current_match_key = NULL; $this->substitution_current_label = NULL; $this->links = array(); $this->substitutions = array(); $breadcrumb_tpl = do_template('BREADCRUMB_ESCAPED'); $this->breadcrumb_tpl = $breadcrumb_tpl->evaluate(); $this->current_breadcrumbs = $current_breadcrumbs; // Create and setup our parser $xml_parser = @xml_parser_create(); if ($xml_parser === false) { return; // PHP5 default build on windows comes with this function disabled, so we need to be able to escape on error } xml_set_object($xml_parser, $this); @xml_parser_set_option($xml_parser, XML_OPTION_TARGET_ENCODING, get_charset()); @xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, 0); xml_set_element_handler($xml_parser, 'startElement', 'endElement'); xml_set_character_data_handler($xml_parser, 'startText'); // Run the parser if (@xml_parse($xml_parser, $data, true) == 0) { attach_message('breadcrumbs.xml: ' . xml_error_string(xml_get_error_code($xml_parser)), 'warn'); return; } @xml_parser_free($xml_parser); }
function xml() { $this->parser = xml_parser_create(); xml_set_object($this->parser, $this); xml_set_element_handler($this->parser, "tag_open", "tag_close"); xml_set_character_data_handler($this->parser, "cdata"); }
/** * Load translation data (XLIFF file reader) * * @param string $locale Locale/Language to add data for, identical with locale identifier, * see Zend_Locale for more information * @param string $filename XLIFF file to add, full path must be given for access * @param array $option OPTIONAL Options to use * @throws Zend_Translation_Exception * @return array */ protected function _loadTranslationData($filename, $locale, array $options = array()) { $this->_data = array(); if (!is_readable($filename)) { require_once 'Zend/Translate/Exception.php'; throw new Zend_Translate_Exception('Translation file \'' . $filename . '\' is not readable.'); } if (empty($options['useId'])) { $this->_useId = false; } else { $this->_useId = true; } $encoding = $this->_findEncoding($filename); $this->_target = $locale; $this->_file = xml_parser_create($encoding); xml_set_object($this->_file, $this); xml_parser_set_option($this->_file, XML_OPTION_CASE_FOLDING, 0); xml_set_element_handler($this->_file, "_startElement", "_endElement"); xml_set_character_data_handler($this->_file, "_contentElement"); if (!xml_parse($this->_file, file_get_contents($filename))) { $ex = sprintf('XML error: %s at line %d', xml_error_string(xml_get_error_code($this->_file)), xml_get_current_line_number($this->_file)); xml_parser_free($this->_file); require_once 'Zend/Translate/Exception.php'; throw new Zend_Translate_Exception($ex); } return $this->_data; }
/** * Load translation data (TBX file reader) * * @param string $filename TBX file to add, full path must be given for access * @param string $locale Locale has no effect for TBX because TBX defines all languages within * the source file * @param array $option OPTIONAL Options to use * @throws Zend_Translation_Exception * @return array */ protected function _loadTranslationData($filename, $locale, array $options = array()) { $this->_data = array(); if (!is_readable($filename)) { require_once 'Zend/Translate/Exception.php'; throw new Zend_Translate_Exception('Translation file \'' . $filename . '\' is not readable.'); } $encoding = $this->_findEncoding($filename); $this->_file = xml_parser_create($encoding); xml_set_object($this->_file, $this); xml_parser_set_option($this->_file, XML_OPTION_CASE_FOLDING, 0); xml_set_element_handler($this->_file, "_startElement", "_endElement"); xml_set_character_data_handler($this->_file, "_contentElement"); try { Zend_Xml_Security::scanFile($filename); } catch (Zend_Xml_Exception $e) { require_once 'Zend/Translate/Exception.php'; throw new Zend_Translate_Exception($e->getMessage()); } if (!xml_parse($this->_file, file_get_contents($filename))) { $ex = sprintf('XML error: %s at line %d of file %s', xml_error_string(xml_get_error_code($this->_file)), xml_get_current_line_number($this->_file), $filename); xml_parser_free($this->_file); require_once 'Zend/Translate/Exception.php'; throw new Zend_Translate_Exception($ex); } return $this->_data; }
private function elementOpen($parser, $name, $attribs) { if ($this->softNamespaces) { // Check namespaces manually, so expat doesn't throw // errors on use of undeclared namespaces. foreach ($attribs as $attrib => $val) { if ($attrib == 'xmlns') { $this->namespaces[''] = $val; } elseif (substr($attrib, 0, strlen('xmlns:')) == 'xmlns:') { $this->namespaces[substr($attrib, strlen('xmlns:'))] = $val; } } if (strpos($name, ':') === false) { $ns = ''; $subname = $name; } else { list($ns, $subname) = explode(':', $name, 2); } if (isset($this->namespaces[$ns])) { $name = $this->namespaces[$ns] . ':' . $subname; } else { // Technically this is invalid for XML with Namespaces. // But..... we'll just let it slide in soft mode. } } // We only need the first open element $this->rootElement = $name; xml_set_element_handler($parser, false, false); }
function MagpieRSS($source) { # if PHP xml isn't compiled in, die # if (!function_exists('xml_parser_create')) { trigger_error("Failed to load PHP's XML Extension. http://www.php.net/manual/en/ref.xml.php"); } $parser = @xml_parser_create(); if (!is_resource($parser)) { trigger_error("Failed to create an instance of PHP's XML parser. http://www.php.net/manual/en/ref.xml.php"); } $this->parser = $parser; # pass in parser, and a reference to this object # set up handlers # xml_set_object($this->parser, $this); xml_set_element_handler($this->parser, 'feed_start_element', 'feed_end_element'); xml_set_character_data_handler($this->parser, 'feed_cdata'); $status = xml_parse($this->parser, $source); if (!$status) { $errorcode = xml_get_error_code($this->parser); if ($errorcode != XML_ERROR_NONE) { $xml_error = xml_error_string($errorcode); $error_line = xml_get_current_line_number($this->parser); $error_col = xml_get_current_column_number($this->parser); $errormsg = "{$xml_error} at line {$error_line}, column {$error_col}"; $this->error($errormsg); } } xml_parser_free($this->parser); $this->normalize(); }
function analyser($file = "") { global $charset; if (!($fp = @fopen($this->file, "r"))) { die("impossible d'ouvrir le fichier {$this->file}"); } $data = fread($fp, filesize($this->file)); $rx = "/<?xml.*encoding=[\\'\"](.*?)[\\'\"].*?>/m"; if (preg_match($rx, $data, $m)) { $encoding = strtoupper($m[1]); } else { $encoding = "ISO-8859-1"; } $this->analyseur = xml_parser_create($encoding); xml_parser_set_option($this->analyseur, XML_OPTION_TARGET_ENCODING, $charset); xml_parser_set_option($this->analyseur, XML_OPTION_CASE_FOLDING, true); xml_set_object($this->analyseur, $this); xml_set_element_handler($this->analyseur, "debutBalise", "finBalise"); xml_set_character_data_handler($this->analyseur, "texte"); fclose($fp); if (!xml_parse($this->analyseur, $data, TRUE)) { die(sprintf("erreur XML %s à la ligne: %d ( {$this->file} )\n\n", xml_error_string(xml_get_error_code($this->analyseur)), xml_get_current_line_number($this->analyseur))); } xml_parser_free($this->analyseur); }
/** * constructor * * @param string path of input stream * @access public */ function _parse_proppatch($path) { $this->success = true; $this->depth = 0; $this->props = array(); $had_input = false; $f_in = fopen($path, "r"); if (!$f_in) { $this->success = false; return; } $xml_parser = xml_parser_create_ns("UTF-8", " "); xml_set_element_handler($xml_parser, array(&$this, "_startElement"), array(&$this, "_endElement")); xml_set_character_data_handler($xml_parser, array(&$this, "_data")); xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, false); while ($this->success && !feof($f_in)) { $line = fgets($f_in); if (is_string($line)) { $had_input = true; $this->success &= xml_parse($xml_parser, $line, false); } } if ($had_input) { $this->success &= xml_parse($xml_parser, "", true); } xml_parser_free($xml_parser); fclose($f_in); }
/** * Load translation data (XMLTM file reader) * * @param string $locale Locale/Language to add data for, identical with locale identifier, * see Zend_Locale for more information * @param string $filename XMLTM file to add, full path must be given for access * @param array $option OPTIONAL Options to use * @throws \Zend\Translator\Adapter\Exception\InvalidArgumentException * @throws \Zend\Translator\Adapter\Exception\InvalidFileTypeException * @return array */ protected function _loadTranslationData($filename, $locale, array $options = array()) { $this->_data = array(); $this->_lang = $locale; if (!is_readable($filename)) { throw new InvalidArgumentException('Translation file \'' . $filename . '\' is not readable.'); } $encoding = $this->_findEncoding($filename); $this->_file = xml_parser_create($encoding); xml_set_object($this->_file, $this); xml_parser_set_option($this->_file, XML_OPTION_CASE_FOLDING, 0); xml_set_element_handler($this->_file, "_startElement", "_endElement"); xml_set_character_data_handler($this->_file, "_contentElement"); if (!xml_parse($this->_file, file_get_contents($filename))) { $ex = sprintf('XML error: %s at line %d', xml_error_string(xml_get_error_code($this->_file)), xml_get_current_line_number($this->_file)); xml_parser_free($this->_file); throw new InvalidFileTypeException($ex); } return $this->_data; }
function reset() { if ($this->parser) { xml_parser_free($this->parser); } // XML file pointer $this->fp = 0; // which data has been read? $this->metaDataRead = 0; $this->allRead = 0; // to maintain track of where we are inside the XML file $this->inXml = 0; $this->inData = 0; $this->inMeta = 0; $this->inSkin = 0; $this->inTemplate = 0; $this->currentName = ''; $this->currentPartName = ''; // character data pile $this->cdata = ''; // list of skinnames and templatenames (will be array of array) $this->skins = array(); $this->templates = array(); // extra info included in the XML files (e.g. installation notes) $this->info = ''; // init XML parser $this->parser = xml_parser_create(); xml_set_object($this->parser, $this); xml_set_element_handler($this->parser, 'startElement', 'endElement'); xml_set_character_data_handler($this->parser, 'characterData'); xml_parser_set_option($this->parser, XML_OPTION_CASE_FOLDING, 0); }
function loadXML($file) { $this->_parser = xml_parser_create($this->getEncoding($file)); // Auto detect for PHP4/PHP5 xml_set_object($this->_parser, $this); xml_set_element_handler($this->_parser, "_saxStartElement", "_saxEndElement"); xml_set_character_data_handler($this->_parser, "_saxCharacterData"); xml_parser_set_option($this->_parser, XML_OPTION_TARGET_ENCODING, "UTF-8"); if ($fp = fopen($file, "r")) { $data = ''; while (!feof($fp)) { $data .= fread($fp, 8192); } fclose($fp); // Strip slashes if (ini_get("magic_quotes_gpc")) { $data = stripslashes($data); } // XML parse if (!xml_parse($this->_parser, $data, true)) { trigger_error(sprintf("Language pack loading failed, XML error: %s at line %d.", xml_error_string(xml_get_error_code($this->_parser)), xml_get_current_line_number($this->_parser)), FATAL); } } else { trigger_error("Could not open XML language pack: " . $file, FATAL); } xml_parser_free($this->_parser); }
/** * Constructor. * * @param string $xml XML content. * @param string $encoding Character set encoding, defaults to 'UTF-8'. * @param array $attachments List of attachments. */ function SOAP_Parser($xml, $encoding = SOAP_DEFAULT_ENCODING, $attachments = null) { parent::SOAP_Base('Parser'); $this->_setSchemaVersion(SOAP_XML_SCHEMA_VERSION); $this->attachments = $attachments; // Check the XML tag for encoding. if (preg_match('/<\\?xml[^>]+encoding\\s*?=\\s*?(\'([^\']*)\'|"([^"]*)")[^>]*?[\\?]>/', $xml, $m)) { $encoding = strtoupper($m[2] ? $m[2] : $m[3]); } // Determine where in the message we are (envelope, header, body, // method). Check whether content has been read. if (!empty($xml)) { // Prepare the XML parser. $parser = xml_parser_create($encoding); xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0); xml_set_object($parser, $this); xml_set_element_handler($parser, '_startElement', '_endElement'); xml_set_character_data_handler($parser, '_characterData'); // Some lame SOAP implementations add nul bytes at the end of the // SOAP stream, and expat chokes on that. if ($xml[strlen($xml) - 1] == 0) { $xml = trim($xml); } // Parse the XML file. if (!xml_parse($parser, $xml, true)) { $err = sprintf('XML error on line %d col %d byte %d %s', xml_get_current_line_number($parser), xml_get_current_column_number($parser), xml_get_current_byte_index($parser), xml_error_string(xml_get_error_code($parser))); $this->_raiseSoapFault($err, htmlspecialchars($xml)); } xml_parser_free($parser); } }