PortableInfobox/services/Parser/XmlParser.php
idradm 3e8a665242 Merge remote-tracking branch 'origin/dev' into DAT-2839
# Conflicts:
#	extensions/wikia/PortableInfobox/PortableInfobox.setup.php
#	extensions/wikia/PortableInfobox/controllers/PortableInfoboxParserTagController.class.php
#	extensions/wikia/PortableInfobox/services/Parser/XmlParser.php
#	extensions/wikia/PortableInfobox/styles/PortableInfobox.scss
2015-06-19 14:43:40 +02:00

54 lines
1.3 KiB
PHP

<?php
namespace Wikia\PortableInfobox\Parser;
use Wikia\Logger\WikiaLogger;
class XmlParser {
/**
* @param string $xmlString XML to parse
*
* @param array $errors this array will be filled with errors if any found
*
* @return \SimpleXMLElement
* @throws XmlMarkupParseErrorException
*/
public static function parseXmlString( $xmlString, &$errors = [ ] ) {
$global_libxml_setting = libxml_use_internal_errors();
libxml_use_internal_errors( true );
$xml = simplexml_load_string( $xmlString );
$errors = libxml_get_errors();
libxml_use_internal_errors( $global_libxml_setting );
if ( $xml === false ) {
foreach ( $errors as $xmlerror ) {
self::logXmlParseError( $xmlerror->level, $xmlerror->code, trim( $xmlerror->message ) );
}
libxml_clear_errors();
throw new XmlMarkupParseErrorException( $errors );
}
return $xml;
}
protected static function logXmlParseError( $level, $code, $message ) {
WikiaLogger::instance()->info( "PortableInfobox XML Parser problem", [
"level" => $level,
"code" => $code,
"message" => $message ] );
}
}
class XmlMarkupParseErrorException extends \Exception {
private $errors;
public function __construct( $errors ) {
$this->errors = $errors;
return parent::__construct();
}
public function getErrors() {
return $this->errors;
}
}