本文整理汇总了PHP中xml_get_current_line_number函数的典型用法代码示例。如果您正苦于以下问题:PHP xml_get_current_line_number函数的具体用法?PHP xml_get_current_line_number怎么用?PHP xml_get_current_line_number使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了xml_get_current_line_number函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: parse
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;
}
示例2: runTest
public function runTest()
{
$testResult = true;
$this->logger->trace('Entering ' . __METHOD__);
$this->logger->info(' Testing the file [' . $this->fileName . '] for well-formedness');
$xmlParser = xml_parser_create();
$file = join(DIRECTORY_SEPARATOR, array($this->directory, $this->fileName));
if (!($fp = fopen($file, "r"))) {
$this->logger->error(' Could not open XML-file for input [' . $file . ']');
throw new Exception('Could not open XML input : ' . $file);
}
$errorFound = false;
while (($data = fread($fp, Constants::XML_PARSE_BUFFER_SIZE)) && $errorFound == false) {
if (!xml_parse($xmlParser, $data, feof($fp))) {
$testResult = false;
$errorFound = true;
$this->logger->error(xml_get_current_line_number($xmlParser) . ' ' . xml_error_string(xml_get_error_code($xmlParser)));
}
}
xml_parser_free($xmlParser);
if ($testResult == true) {
$this->testProperty->addTestResult(true);
$this->logger->info(' RESULT The file ' . $this->fileName . ' is well-formed.');
$this->testProperty->addTestResultDescription('The file ' . $this->fileName . ' is well-formed.');
$this->testProperty->addTestResultReportDescription('Filen ' . $this->fileName . ' er korrektstrukturert.');
} else {
$this->testProperty->addTestResult(false);
$this->testProperty->addTestResultDescription('The file ' . $this->fileName . ' is not well-formed.');
$this->logger->error(' RESULT The file ' . $this->fileName . ' is not well-formed.');
$this->testProperty->addTestResultReportDescription('Filen ' . $this->fileName . ' er ikke korrektstrukturert.');
}
}
示例3: _loadTranslationData
/**
* 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;
}
示例4: MagpieRSS
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();
}
示例5: __construct
public function __construct($dataDirectory)
{
//
// Default to English for lack of anything better
//
$this->clientLang = 'en-us';
//
// See if we can find anything better
//
$matches = array();
if (array_key_exists('HTTP_ACCEPT_LANGUAGE', $_SERVER)) {
setlocale(LC_ALL, 'en-US');
if (preg_match('/(en-US|fr-FR|de-DE|it-IT|es-ES|sv-SV|sv-SE|nl-NL)/i', $_SERVER['HTTP_ACCEPT_LANGUAGE'], $matches)) {
$this->clientLang = strtolower($matches[1]);
}
}
//
// Pull in all of the strings we need
//
$lang2file = array("es-es" => "es-ES.xml", "en-us" => "en-US.xml", "de-de" => "de-DE.xml", "fr-fr" => "fr-FR.xml", "it-it" => "it-IT.xml", "nl-nl" => "nl-NL.xml", "sv-sv" => "sv-SE.xml", "sv-se" => "sv-SE.xml");
$xml_parser = xml_parser_create();
$l10nValues = array();
$l10nIndexes = array();
$l10nContents = file_get_contents("{$dataDirectory}/" . $lang2file[$this->getClientLang()]);
if (!xml_parse_into_struct($xml_parser, $l10nContents, $l10nValues, $l10nIndexes)) {
die(sprintf("l10n: XML error: %s at line %d", xml_error_string(xml_get_error_code($xml_parser)), xml_get_current_line_number($xml_parser)));
} else {
foreach ($l10nIndexes["STRING"] as $l10nStringIndex) {
$this->l10n[$l10nValues[$l10nStringIndex]["attributes"]["ID"]] = $l10nValues[$l10nStringIndex]["value"];
}
}
xml_parser_free($xml_parser);
}
示例6: load
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);
}
示例7: fetch
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;
}
示例8: parse
public function parse($html)
{
// replace entities
$html = preg_replace('/&([a-z0-9#]{2,5});/i', '+$1;', $html);
//before sending to xml parser make sure we have valid xml by tidying it up
$html = Kwf_Util_Tidy::repairHtml($html);
$this->_stack = array();
$this->_ret = '';
$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_set_default_handler($this->_parser, 'characterData');
$result = xml_parse($this->_parser, '<body>' . $html . '</body>', true);
if (!$result) {
// wenn man ein nicht geschlossenes <br> rein gibt, schreit er hier,
// macht aber normal weiter. wenns zu oft vorkommt, evtl. exception
// entfernen und ignorieren, oder was andres überlegen :-)
$errorCode = xml_get_error_code($this->_parser);
$ex = new Kwf_Exception("HtmlExport UrlParser XML Error {$errorCode}: " . xml_error_string($errorCode) . "in line " . xml_get_current_line_number($this->_parser) . " parsed html: " . $html);
$ex->logOrThrow();
}
// re-replace entities
$this->_ret = preg_replace('/\\+([a-z0-9#]{2,5});/i', '&$1;', $this->_ret);
return $this->_ret;
}
示例9: _parseXML
function _parseXML()
{
$this->items = array();
$this->item = array();
$this->is_item = FALSE;
$this->tag = '';
$this->level_base = 0;
$buf = $this->src;
// Detect encoding
$matches = array();
if (preg_match('/<\\?xml [^>]*\\bencoding="([a-z0-9-_]+)"/i', $buf, $matches)) {
$this->encoding = $matches[1];
} else {
$this->encoding = mb_detect_encoding($buf, $this->detect_order);
}
// Normalize to UTF-8 / ASCII
if (!in_array(strtolower($this->encoding), array('us-ascii', 'iso-8859-1', 'utf-8'))) {
$buf = mb_convert_encoding($buf, 'utf-8', $this->encoding);
$this->encoding = 'utf-8';
}
// Parsing
$xml_parser = xml_parser_create($this->encoding);
xml_set_element_handler($xml_parser, array(&$this, 'start_element'), array(&$this, 'end_element'));
xml_set_character_data_handler($xml_parser, array(&$this, 'character_data'));
if (!xml_parse($xml_parser, $buf, 1)) {
return sprintf('XML error: %s at line %d in %s', xml_error_string(xml_get_error_code($xml_parser)), xml_get_current_line_number($xml_parser), $buf);
}
xml_parser_free($xml_parser);
//return $this->items;
}
示例10: parseXml
/**
* Method parses a mirror.xml file.
*
* @param string $file GZIP stream resource
* @return void
* @throws \TYPO3\CMS\Extensionmanager\Exception\ExtensionManagerException in case of XML parser errors
*/
public function parseXml($file)
{
$this->createParser();
if (!is_resource($this->objXml)) {
throw new \TYPO3\CMS\Extensionmanager\Exception\ExtensionManagerException('Unable to create XML parser.', 1342641009);
}
// Disables the functionality to allow external entities to be loaded when parsing the XML, must be kept
$previousValueOfEntityLoader = libxml_disable_entity_loader(true);
// keep original character case of XML document
xml_parser_set_option($this->objXml, XML_OPTION_CASE_FOLDING, false);
xml_parser_set_option($this->objXml, XML_OPTION_SKIP_WHITE, false);
xml_parser_set_option($this->objXml, XML_OPTION_TARGET_ENCODING, 'utf-8');
xml_set_element_handler($this->objXml, 'startElement', 'endElement');
xml_set_character_data_handler($this->objXml, 'characterData');
if (!($fp = fopen($file, 'r'))) {
throw new \TYPO3\CMS\Extensionmanager\Exception\ExtensionManagerException(sprintf('Unable to open file resource %s.', $file), 1342641010);
}
while ($data = fread($fp, 4096)) {
if (!xml_parse($this->objXml, $data, feof($fp))) {
throw new \TYPO3\CMS\Extensionmanager\Exception\ExtensionManagerException(sprintf('XML error %s in line %u of file resource %s.', xml_error_string(xml_get_error_code($this->objXml)), xml_get_current_line_number($this->objXml), $file), 1342641011);
}
}
libxml_disable_entity_loader($previousValueOfEntityLoader);
xml_parser_free($this->objXml);
}
示例11: parse
function parse()
{
set_error_handler(array(&$this, 'error_handler'));
array_unshift($this->ns_contexts, array());
$parser = xml_parser_create_ns();
xml_set_object($parser, $this);
xml_set_element_handler($parser, "start_element", "end_element");
xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 0);
xml_set_character_data_handler($parser, "cdata");
xml_set_default_handler($parser, "_default");
xml_set_start_namespace_decl_handler($parser, "start_ns");
xml_set_end_namespace_decl_handler($parser, "end_ns");
$this->content = '';
$ret = true;
$fp = fopen($this->FILE, "r");
while ($data = fread($fp, 4096)) {
if ($this->debug) {
$this->content .= $data;
}
if (!xml_parse($parser, $data, feof($fp))) {
trigger_error(sprintf(__('XML error: %s at line %d') . "\n", xml_error_string(xml_get_error_code($xml_parser)), xml_get_current_line_number($xml_parser)));
$ret = false;
break;
}
}
fclose($fp);
xml_parser_free($parser);
restore_error_handler();
return $ret;
}
示例12: __construct
/**
* PHP5 constructor.
*/
function __construct($source)
{
# Check if PHP xml isn't compiled
#
if (!function_exists('xml_parser_create')) {
return trigger_error("PHP's XML extension is not available. Please contact your hosting provider to enable PHP's XML extension.");
}
$parser = xml_parser_create();
$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();
}
示例13: xmlize
/**
* Create an array structure from an XML string.
*
* Usage:<br>
* <code>
* $xml = xmlize($array);
* </code>
* See the function {@link traverse_xmlize()} for information about the
* structure of the array, it's much easier to explain by showing you.
* Be aware that the array is somewhat tricky. I use xmlize all the time,
* but still need to use {@link traverse_xmlize()} quite often to show me the structure!
*
* THIS IS A PHP 5 VERSION:
*
* This modified version basically has a new optional parameter
* to specify an OUTPUT encoding. If not specified, it defaults to UTF-8.
* I recommend you to read this PHP bug. There you can see how PHP4, PHP5.0.0
* and PHP5.0.2 will handle this.
* {@link http://bugs.php.net/bug.php?id=29711}
* Ciao, Eloy :-)
*
* @param string $data The XML source to parse.
* @param int $whitespace If set to 1 allows the parser to skip "space" characters in xml document. Default is 1
* @param string $encoding Specify an OUTPUT encoding. If not specified, it defaults to UTF-8.
* @param bool $reporterrors if set to true, then a {@link xml_format_exception}
* exception will be thrown if the XML is not well-formed. Otherwise errors are ignored.
* @return array representation of the parsed XML.
*/
function xmlize($data, $whitespace = 1, $encoding = 'UTF-8', $reporterrors = false)
{
$data = trim($data);
$vals = array();
$parser = xml_parser_create($encoding);
xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, $whitespace);
xml_parse_into_struct($parser, $data, $vals);
// Error handling when the xml file is not well-formed
if ($reporterrors) {
$errorcode = xml_get_error_code($parser);
if ($errorcode) {
$exception = new xml_format_exception(xml_error_string($errorcode), xml_get_current_line_number($parser), xml_get_current_column_number($parser));
xml_parser_free($parser);
throw $exception;
}
}
xml_parser_free($parser);
$i = 0;
if (empty($vals)) {
// XML file is invalid or empty, return false
return false;
}
$array = array();
$tagname = $vals[$i]['tag'];
if (isset($vals[$i]['attributes'])) {
$array[$tagname]['@'] = $vals[$i]['attributes'];
} else {
$array[$tagname]['@'] = array();
}
$array[$tagname]["#"] = xml_depth($vals, $i);
return $array;
}
示例14: execute
public function execute()
{
global $CFG;
require_once $CFG->dirroot . '/course/lib.php';
$options = $this->expandedOptions;
$arguments = $this->arguments;
$this->checkFileArg($arguments[0]);
$this->categorystack = array();
if ($options['parent']) {
$this->categorystack[] = $options['parent'];
} else {
$this->categorystack[] = 0;
}
$this->coursesmap = array();
$this->parser = xml_parser_create();
xml_set_element_handler($this->parser, array(&$this, "start_element"), array(&$this, "end_element"));
if (!($fp = fopen($arguments[0], "r"))) {
die("could not open XML input");
}
while ($data = fread($fp, 4096)) {
if (!xml_parse($this->parser, $data, feof($fp))) {
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);
fix_course_sortorder();
}
示例15: analyser_XML
/**
* Pour tester la validité d'un document XML, on peut utiliser un analyseur syntaxique XML : http://fr3.php.net/manual/fr/book.xml.php
* Voir en particulier l'exemple http://fr3.php.net/manual/fr/example.xml-structure.php
*
* Mais ceci ne permet pas de vérifier la conformité d'un XML avec une DTD.
* DOMDocument le permet : http://fr2.php.net/manual/fr/domdocument.validate.php
* Mais d'une part ça emmet des warnings et d'autre part ça ne retourne qu'un booléen sans détails sur les erreurs trouvées
*
* Pour y remédier on peut utiliser cette extention de classe "MyDOMDocument" : http://fr2.php.net/manual/fr/domdocument.validate.php#85792
* Mais attention : il faut lui fournir un objet DOMDocument et load ou loadXML provoquent des warnings préliminaires si le XML est mal formé.
*
* Ma solution est d'utiliser :
* 1. dans un premier temps l'analyseur syntaxique XML xml_parse pour vérifier que le XML est bien formé
* 2. dans un second temps l'extention de classe MyDOMDocument pour vérifier la conformité avec la DTD
*
* J'en ai fait la fonction ci-dessous "analyser_XML($fichier)".
* La classe "MyDOMDocument" est dans autochargée (elle se trouve ici : _inc/class.domdocument.php).
*
* @param string $fichier_adresse
* @return string 'ok' ou un message d'erreur
*/
private static function analyser_XML($fichier_adresse)
{
// Récupération du contenu du fichier
$fichier_contenu = file_get_contents($fichier_adresse);
$fichier_contenu = To::deleteBOM(To::utf8($fichier_contenu)); // Mettre en UTF-8 si besoin et retirer le BOM éventuel
FileSystem::ecrire_fichier($fichier_adresse,$fichier_contenu); // Mettre à jour le fichier au cas où.
// Analyse XML (s'arrête à la 1ère erreur trouvée)
$xml_parser = xml_parser_create();
$valid_XML = xml_parse($xml_parser , $fichier_contenu , TRUE);
if(!$valid_XML)
{
return sprintf("Erreur XML ligne %d (%s)" , xml_get_current_line_number($xml_parser) , xml_error_string(xml_get_error_code($xml_parser)));
}
xml_parser_free($xml_parser);
// Analyse DTD (renvoie un tableau d'erreurs, affiche la dernière)
$xml = new DOMDocument;
$xml -> load($fichier_adresse);
$xml = new MyDOMDocument($xml);
$valid_DTD = $xml->validate();
if(!$valid_DTD)
{
return 'Erreur DTD : '.end($xml->errors);
}
// Tout est ok
return 'ok';
}