X-Git-Url: https://yaffs.net/gitweb/?a=blobdiff_plain;f=vendor%2Fsymfony%2Fconfig%2FUtil%2FXmlUtils.php;h=8ad58d61e6ab4312592600aca2bf11cc25250a30;hb=5b8bb166bfa98770daef9de5c127fc2e6ef02340;hp=25d9b0a0abe5d6ff2906b5f6ac5562433b9964a6;hpb=a2bd1bf0c2c1f1a17d188f4dc0726a45494cefae;p=yaffs-website diff --git a/vendor/symfony/config/Util/XmlUtils.php b/vendor/symfony/config/Util/XmlUtils.php index 25d9b0a0a..8ad58d61e 100644 --- a/vendor/symfony/config/Util/XmlUtils.php +++ b/vendor/symfony/config/Util/XmlUtils.php @@ -11,6 +11,9 @@ namespace Symfony\Component\Config\Util; +use Symfony\Component\Config\Util\Exception\InvalidXmlException; +use Symfony\Component\Config\Util\Exception\XmlParsingException; + /** * XMLUtils is a bunch of utility methods to XML operations. * @@ -18,6 +21,7 @@ namespace Symfony\Component\Config\Util; * * @author Fabien Potencier * @author Martin Hasoň + * @author Ole Rößner */ class XmlUtils { @@ -29,20 +33,21 @@ class XmlUtils } /** - * Loads an XML file. + * Parses an XML string. * - * @param string $file An XML file path + * @param string $content An XML string * @param string|callable|null $schemaOrCallable An XSD schema file path, a callable, or null to disable validation * * @return \DOMDocument * - * @throws \InvalidArgumentException When loading of XML file returns error + * @throws XmlParsingException When parsing of XML file returns error + * @throws InvalidXmlException When parsing of XML with schema or callable produces any errors unrelated to the XML parsing itself + * @throws \RuntimeException When DOM extension is missing */ - public static function loadFile($file, $schemaOrCallable = null) + public static function parse($content, $schemaOrCallable = null) { - $content = @file_get_contents($file); - if ('' === trim($content)) { - throw new \InvalidArgumentException(sprintf('File %s does not contain valid XML, it is empty.', $file)); + if (!\extension_loaded('dom')) { + throw new \RuntimeException('Extension DOM is required.'); } $internalErrors = libxml_use_internal_errors(true); @@ -51,10 +56,10 @@ class XmlUtils $dom = new \DOMDocument(); $dom->validateOnParse = true; - if (!$dom->loadXML($content, LIBXML_NONET | (defined('LIBXML_COMPACT') ? LIBXML_COMPACT : 0))) { + if (!$dom->loadXML($content, LIBXML_NONET | (\defined('LIBXML_COMPACT') ? LIBXML_COMPACT : 0))) { libxml_disable_entity_loader($disableEntities); - throw new \InvalidArgumentException(implode("\n", static::getXmlErrors($internalErrors))); + throw new XmlParsingException(implode("\n", static::getXmlErrors($internalErrors))); } $dom->normalizeDocument(); @@ -63,8 +68,8 @@ class XmlUtils libxml_disable_entity_loader($disableEntities); foreach ($dom->childNodes as $child) { - if ($child->nodeType === XML_DOCUMENT_TYPE_NODE) { - throw new \InvalidArgumentException('Document types are not allowed.'); + if (XML_DOCUMENT_TYPE_NODE === $child->nodeType) { + throw new XmlParsingException('Document types are not allowed.'); } } @@ -73,27 +78,27 @@ class XmlUtils libxml_clear_errors(); $e = null; - if (is_callable($schemaOrCallable)) { + if (\is_callable($schemaOrCallable)) { try { - $valid = call_user_func($schemaOrCallable, $dom, $internalErrors); + $valid = \call_user_func($schemaOrCallable, $dom, $internalErrors); } catch (\Exception $e) { $valid = false; } - } elseif (!is_array($schemaOrCallable) && is_file((string) $schemaOrCallable)) { + } elseif (!\is_array($schemaOrCallable) && is_file((string) $schemaOrCallable)) { $schemaSource = file_get_contents((string) $schemaOrCallable); $valid = @$dom->schemaValidateSource($schemaSource); } else { libxml_use_internal_errors($internalErrors); - throw new \InvalidArgumentException('The schemaOrCallable argument has to be a valid path to XSD file or callable.'); + throw new XmlParsingException('The schemaOrCallable argument has to be a valid path to XSD file or callable.'); } if (!$valid) { $messages = static::getXmlErrors($internalErrors); if (empty($messages)) { - $messages = array(sprintf('The XML file "%s" is not valid.', $file)); + throw new InvalidXmlException('The XML is not valid.', 0, $e); } - throw new \InvalidArgumentException(implode("\n", $messages), 0, $e); + throw new XmlParsingException(implode("\n", $messages), 0, $e); } } @@ -104,7 +109,33 @@ class XmlUtils } /** - * Converts a \DomElement object to a PHP array. + * Loads an XML file. + * + * @param string $file An XML file path + * @param string|callable|null $schemaOrCallable An XSD schema file path, a callable, or null to disable validation + * + * @return \DOMDocument + * + * @throws \InvalidArgumentException When loading of XML file returns error + * @throws XmlParsingException When XML parsing returns any errors + * @throws \RuntimeException When DOM extension is missing + */ + public static function loadFile($file, $schemaOrCallable = null) + { + $content = @file_get_contents($file); + if ('' === trim($content)) { + throw new \InvalidArgumentException(sprintf('File %s does not contain valid XML, it is empty.', $file)); + } + + try { + return static::parse($content, $schemaOrCallable); + } catch (InvalidXmlException $e) { + throw new XmlParsingException(sprintf('The XML file "%s" is not valid.', $file), 0, $e->getPrevious()); + } + } + + /** + * Converts a \DOMElement object to a PHP array. * * The following rules applies during the conversion: * @@ -118,7 +149,7 @@ class XmlUtils * * * The nested-tags are converted to keys (bar) * - * @param \DomElement $element A \DomElement instance + * @param \DOMElement $element A \DOMElement instance * @param bool $checkPrefix Check prefix in an element or an attribute name * * @return array A PHP array @@ -129,7 +160,7 @@ class XmlUtils $empty = true; $config = array(); foreach ($element->attributes as $name => $node) { - if ($checkPrefix && !in_array((string) $node->prefix, array('', $prefix), true)) { + if ($checkPrefix && !\in_array((string) $node->prefix, array('', $prefix), true)) { continue; } $config[$name] = static::phpize($node->value); @@ -150,7 +181,7 @@ class XmlUtils $key = $node->localName; if (isset($config[$key])) { - if (!is_array($config[$key]) || !is_int(key($config[$key]))) { + if (!\is_array($config[$key]) || !\is_int(key($config[$key]))) { $config[$key] = array($config[$key]); } $config[$key][] = $value; @@ -164,7 +195,7 @@ class XmlUtils if (false !== $nodeValue) { $value = static::phpize($nodeValue); - if (count($config)) { + if (\count($config)) { $config['value'] = $value; } else { $config = $value; @@ -209,7 +240,7 @@ class XmlUtils return '0x' === $value[0].$value[1] ? hexdec($value) : (float) $value; case preg_match('/^0x[0-9a-f]++$/i', $value): return hexdec($value); - case preg_match('/^(-|\+)?[0-9]+(\.[0-9]+)?$/', $value): + case preg_match('/^[+-]?[0-9]+(\.[0-9]+)?$/', $value): return (float) $value; default: return $value;