X-Git-Url: http://www.aleph1.co.uk/gitweb/?p=yaffs-website;a=blobdiff_plain;f=vendor%2Fsymfony%2Fconfig%2FUtil%2FXmlUtils.php;fp=vendor%2Fsymfony%2Fconfig%2FUtil%2FXmlUtils.php;h=e1c4a4ad3f01e97a3a51a2a3c1b2898687e23945;hp=25d9b0a0abe5d6ff2906b5f6ac5562433b9964a6;hb=af6d1fb995500ae68849458ee10d66abbdcfb252;hpb=680c79a86e3ed402f263faeac92e89fb6d9edcc0 diff --git a/vendor/symfony/config/Util/XmlUtils.php b/vendor/symfony/config/Util/XmlUtils.php index 25d9b0a0a..e1c4a4ad3 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); @@ -54,7 +59,7 @@ class XmlUtils 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.'); } } @@ -85,15 +90,15 @@ class XmlUtils } 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