[FEATURE] XML parser options for xml2tree() 73/30973/10
authorMarkus Hoelzle <typo3@markus-hoelzle.de>
Wed, 24 Dec 2014 01:17:38 +0000 (02:17 +0100)
committerFrank Nägler <frank.naegler@typo3.org>
Wed, 15 Jul 2015 07:07:55 +0000 (09:07 +0200)
Allow parser-options for xml_parser_set_option() to
be supplied.

Resolves: #59384
Releases: master
Change-Id: I656b36f6252e7dce4ed94e4b9b916dec0fbe884f
Reviewed-on: http://review.typo3.org/30973
Reviewed-by: Stefan Neufeind <typo3.neufeind@speedpartner.de>
Tested-by: Stefan Neufeind <typo3.neufeind@speedpartner.de>
Reviewed-by: Frank Nägler <frank.naegler@typo3.org>
Tested-by: Frank Nägler <frank.naegler@typo3.org>
typo3/sysext/core/Classes/Utility/GeneralUtility.php
typo3/sysext/core/Documentation/Changelog/master/Feature-59384-XMLParserOptionsForXml2tree.rst [new file with mode: 0644]

index 64d357c..670eecf 100755 (executable)
@@ -1899,15 +1899,19 @@ class GeneralUtility {
         *
         * @param string $string XML data input
         * @param int $depth Number of element levels to resolve the XML into an array. Any further structure will be set as XML.
+        * @param array $parserOptions Options that will be passed to PHP's xml_parser_set_option()
         * @return mixed The array with the parsed structure unless the XML parser returns with an error in which case the error message string is returned.
         * @author bisqwit at iki dot fi dot not dot for dot ads dot invalid / http://dk.php.net/xml_parse_into_struct + kasperYYYY@typo3.com
         */
-       static public function xml2tree($string, $depth = 999) {
+       static public function xml2tree($string, $depth = 999, $parserOptions = array()) {
                $parser = xml_parser_create();
                $vals = array();
                $index = array();
                xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
                xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 0);
+               foreach ($parserOptions as $option => $value) {
+                       xml_parser_set_option($parser, $option, $value);
+               }
                xml_parse_into_struct($parser, $string, $vals, $index);
                if (xml_get_error_code($parser)) {
                        return 'Line ' . xml_get_current_line_number($parser) . ': ' . xml_error_string(xml_get_error_code($parser));
diff --git a/typo3/sysext/core/Documentation/Changelog/master/Feature-59384-XMLParserOptionsForXml2tree.rst b/typo3/sysext/core/Documentation/Changelog/master/Feature-59384-XMLParserOptionsForXml2tree.rst
new file mode 100644 (file)
index 0000000..5ca843c
--- /dev/null
@@ -0,0 +1,18 @@
+===================================================
+Feature: #59384 - XML parser options for xml2tree()
+===================================================
+
+Description
+===========
+
+GeneralUtility::xml_parser_set_option() gets an optional parameter, an array, that can hold options for the parser. Those will simply be passed through to the PHP-function xml_parser_set_option().
+
+.. code-block:: php
+
+       GeneralUtility::xml2tree($xmlData, 999, array(XML_OPTION_SKIP_WHITE => 1));
+
+
+Impact
+======
+
+It's just an optional parameter. If you don't specify it simply no additional initialisation of the XML-parser will be done.