diff --git a/ext/xmlreader/php_xmlreader.c b/ext/xmlreader/php_xmlreader.c
index efed79a2395fd..7b2619540956e 100644
--- a/ext/xmlreader/php_xmlreader.c
+++ b/ext/xmlreader/php_xmlreader.c
@@ -175,7 +175,7 @@ zval *xmlreader_write_property(zend_object *object, zend_string *name, zval *val
hnd = zend_hash_find_ptr(obj->prop_handler, name);
}
if (hnd != NULL) {
- php_error_docref(NULL, E_WARNING, "Cannot write to read-only property");
+ zend_throw_error(NULL, "Cannot write to read-only property");
} else {
value = zend_std_write_property(object, name, value, cache_slot);
}
@@ -391,8 +391,8 @@ static void php_xmlreader_string_arg(INTERNAL_FUNCTION_PARAMETERS, xmlreader_rea
}
if (!name_len) {
- php_error_docref(NULL, E_WARNING, "Argument cannot be an empty string");
- RETURN_FALSE;
+ zend_argument_value_error(1, "cannot be empty");
+ RETURN_THROWS();
}
id = ZEND_THIS;
@@ -480,8 +480,8 @@ static void php_xmlreader_set_relaxng_schema(INTERNAL_FUNCTION_PARAMETERS, int t
}
if (source != NULL && !source_len) {
- php_error_docref(NULL, E_WARNING, "Schema data source is required");
- RETURN_FALSE;
+ zend_argument_value_error(1, "cannot be empty");
+ RETURN_THROWS();
}
id = ZEND_THIS;
@@ -506,15 +506,16 @@ static void php_xmlreader_set_relaxng_schema(INTERNAL_FUNCTION_PARAMETERS, int t
intern->schema = schema;
RETURN_TRUE;
+ } else {
+ php_error_docref(NULL, E_WARNING, "Schema contains errors");
+ RETURN_FALSE;
}
+ } else {
+ zend_throw_error(NULL, "Schema must be set prior to reading");
+ RETURN_THROWS();
}
-
- php_error_docref(NULL, E_WARNING, "Unable to set schema. This must be set prior to reading or schema contains errors.");
-
- RETURN_FALSE;
#else
- php_error_docref(NULL, E_WARNING, "No Schema support built into libxml.");
-
+ php_error_docref(NULL, E_WARNING, "No schema support built into libxml");
RETURN_FALSE;
#endif
}
@@ -585,9 +586,14 @@ PHP_METHOD(XMLReader, getAttributeNs)
RETURN_THROWS();
}
- if (name_len == 0 || ns_uri_len == 0) {
- php_error_docref(NULL, E_WARNING, "Attribute Name and Namespace URI cannot be empty");
- RETURN_FALSE;
+ if (name_len == 0) {
+ zend_argument_value_error(1, "cannot be empty");
+ RETURN_THROWS();
+ }
+
+ if (ns_uri_len == 0) {
+ zend_argument_value_error(2, "cannot be empty");
+ RETURN_THROWS();
}
id = ZEND_THIS;
@@ -622,8 +628,8 @@ PHP_METHOD(XMLReader, getParserProperty)
retval = xmlTextReaderGetParserProp(intern->ptr,property);
}
if (retval == -1) {
- php_error_docref(NULL, E_WARNING, "Invalid parser property");
- RETURN_FALSE;
+ zend_argument_value_error(1, "must be a valid parser property");
+ RETURN_THROWS();
}
RETURN_BOOL(retval);
@@ -660,8 +666,8 @@ PHP_METHOD(XMLReader, moveToAttribute)
}
if (name_len == 0) {
- php_error_docref(NULL, E_WARNING, "Attribute Name is required");
- RETURN_FALSE;
+ zend_argument_value_error(1, "cannot be empty");
+ RETURN_THROWS();
}
id = ZEND_THIS;
@@ -719,9 +725,14 @@ PHP_METHOD(XMLReader, moveToAttributeNs)
RETURN_THROWS();
}
- if (name_len == 0 || ns_uri_len == 0) {
- php_error_docref(NULL, E_WARNING, "Attribute Name and Namespace URI cannot be empty");
- RETURN_FALSE;
+ if (name_len == 0) {
+ zend_argument_value_error(1, "cannot be empty");
+ RETURN_THROWS();
+ }
+
+ if (ns_uri_len == 0) {
+ zend_argument_value_error(2, "cannot be empty");
+ RETURN_THROWS();
}
id = ZEND_THIS;
@@ -772,17 +783,17 @@ PHP_METHOD(XMLReader, read)
id = ZEND_THIS;
intern = Z_XMLREADER_P(id);
- if (intern != NULL && intern->ptr != NULL) {
- retval = xmlTextReaderRead(intern->ptr);
- if (retval == -1) {
- RETURN_FALSE;
- } else {
- RETURN_BOOL(retval);
- }
+ if (intern == NULL || intern->ptr == NULL) {
+ zend_throw_error(NULL, "Data must be loaded before reading");
+ RETURN_THROWS();
}
- php_error_docref(NULL, E_WARNING, "Load Data before trying to read");
- RETURN_FALSE;
+ retval = xmlTextReaderRead(intern->ptr);
+ if (retval == -1) {
+ RETURN_FALSE;
+ } else {
+ RETURN_BOOL(retval);
+ }
}
/* }}} */
@@ -816,8 +827,7 @@ PHP_METHOD(XMLReader, next)
}
}
- php_error_docref(NULL, E_WARNING, "Load Data before trying to read");
- RETURN_FALSE;
+ zend_throw_error(NULL, "Data must be loaded before reading");
}
/* }}} */
@@ -848,8 +858,8 @@ PHP_METHOD(XMLReader, open)
}
if (!source_len) {
- php_error_docref(NULL, E_WARNING, "Empty string supplied as input");
- RETURN_FALSE;
+ zend_argument_value_error(1, "cannot be empty");
+ RETURN_THROWS();
}
valid_file = _xmlreader_get_valid_file_path(source, resolved_path, MAXPATHLEN );
@@ -920,8 +930,8 @@ PHP_METHOD(XMLReader, setSchema)
}
if (source != NULL && !source_len) {
- php_error_docref(NULL, E_WARNING, "Schema data source is required");
- RETURN_FALSE;
+ zend_argument_value_error(1, "cannot be empty");
+ RETURN_THROWS();
}
id = ZEND_THIS;
@@ -932,15 +942,16 @@ PHP_METHOD(XMLReader, setSchema)
if (retval == 0) {
RETURN_TRUE;
+ } else {
+ php_error_docref(NULL, E_WARNING, "Schema contains errors");
+ RETURN_FALSE;
}
+ } else {
+ zend_throw_error(NULL, "Schema must be set prior to reading");
+ RETURN_THROWS();
}
-
- php_error_docref(NULL, E_WARNING, "Unable to set schema. This must be set prior to reading or schema contains errors.");
-
- RETURN_FALSE;
#else
- php_error_docref(NULL, E_WARNING, "No Schema support built into libxml.");
-
+ php_error_docref(NULL, E_WARNING, "No schema support built into libxml");
RETURN_FALSE;
#endif
}
@@ -967,8 +978,8 @@ PHP_METHOD(XMLReader, setParserProperty)
retval = xmlTextReaderSetParserProp(intern->ptr,property, value);
}
if (retval == -1) {
- php_error_docref(NULL, E_WARNING, "Invalid parser property");
- RETURN_FALSE;
+ zend_argument_value_error(1, "must be a valid parser property");
+ RETURN_THROWS();
}
RETURN_TRUE;
@@ -1022,8 +1033,8 @@ PHP_METHOD(XMLReader, XML)
}
if (!source_len) {
- php_error_docref(NULL, E_WARNING, "Empty string supplied as input");
- RETURN_FALSE;
+ zend_argument_value_error(1, "cannot be empty");
+ RETURN_THROWS();
}
inputbfr = xmlParserInputBufferCreateMem(source, source_len, XML_CHAR_ENCODING_NONE);
@@ -1105,7 +1116,7 @@ PHP_METHOD(XMLReader, expand)
node = xmlTextReaderExpand(intern->ptr);
if (node == NULL) {
- php_error_docref(NULL, E_WARNING, "An Error Occurred while expanding ");
+ php_error_docref(NULL, E_WARNING, "An Error Occurred while expanding");
RETURN_FALSE;
} else {
nodec = xmlDocCopyNode(node, docp, 1);
@@ -1117,8 +1128,8 @@ PHP_METHOD(XMLReader, expand)
}
}
} else {
- php_error_docref(NULL, E_WARNING, "Load Data before trying to expand");
- RETURN_FALSE;
+ zend_throw_error(NULL, "Data must be loaded before expanding");
+ RETURN_THROWS();
}
#else
php_error(E_WARNING, "DOM support is not enabled");
diff --git a/ext/xmlreader/php_xmlreader.stub.php b/ext/xmlreader/php_xmlreader.stub.php
index 9de30e5a7afd9..582919d49721f 100644
--- a/ext/xmlreader/php_xmlreader.stub.php
+++ b/ext/xmlreader/php_xmlreader.stub.php
@@ -7,7 +7,7 @@ class XMLReader
/** @return bool */
public function close() {}
- /** @return string|null|false */
+ /** @return string|null */
public function getAttribute(string $name) {}
/** @return string|null */
@@ -22,7 +22,7 @@ public function getParserProperty(int $property) {}
/** @return bool */
public function isValid() {}
- /** @return string|null|false */
+ /** @return string|null */
public function lookupNamespace(string $prefix) {}
/** @return bool */
diff --git a/ext/xmlreader/php_xmlreader_arginfo.h b/ext/xmlreader/php_xmlreader_arginfo.h
index 749d8066f41cd..0690d414163e5 100644
--- a/ext/xmlreader/php_xmlreader_arginfo.h
+++ b/ext/xmlreader/php_xmlreader_arginfo.h
@@ -1,5 +1,5 @@
/* This is a generated file, edit the .stub.php file instead.
- * Stub hash: 8bdec18c4ad8574fb1d3e4baca928949d5ec2438 */
+ * Stub hash: 90e6d525ba87399c54f36965ebf18dbf65084617 */
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_XMLReader_close, 0, 0, 0)
ZEND_END_ARG_INFO()
diff --git a/ext/xmlreader/tests/001.phpt b/ext/xmlreader/tests/001.phpt
index c10c1a51635a9..cf255860556f4 100644
--- a/ext/xmlreader/tests/001.phpt
+++ b/ext/xmlreader/tests/001.phpt
@@ -17,10 +17,15 @@ while ($reader->read()) {
}
$xmlstring = '';
$reader = new XMLReader();
-$reader->XML($xmlstring);
+
+try {
+ $reader->XML($xmlstring);
+} catch (ValueError $exception) {
+ echo $exception->getMessage() . "\n";
+}
+
?>
---EXPECTF--
+--EXPECT--
books
books
-
-Warning: XMLReader::XML(): Empty string supplied as input in %s on line %d
+XMLReader::XML(): Argument #1 ($source) cannot be empty
diff --git a/ext/xmlreader/tests/002.phpt b/ext/xmlreader/tests/002.phpt
index 6d12f02204759..803c8c7243aa6 100644
--- a/ext/xmlreader/tests/002.phpt
+++ b/ext/xmlreader/tests/002.phpt
@@ -10,7 +10,11 @@ $xmlstring = '
file_put_contents($filename, $xmlstring);
$reader = new XMLReader();
-if ($reader->open('')) exit();
+try {
+ $reader->open('');
+} catch (ValueError $exception) {
+ echo $exception->getMessage() . "\n";
+}
$reader = new XMLReader();
if (!$reader->open($filename)) {
@@ -31,7 +35,7 @@ $reader->close();
unlink($filename);
?>
---EXPECTF--
-Warning: XMLReader::open(): Empty string supplied as input in %s on line %d
+--EXPECT--
+XMLReader::open(): Argument #1 ($URI) cannot be empty
books
books
diff --git a/ext/xmlreader/tests/003-get-errors.phpt b/ext/xmlreader/tests/003-get-errors.phpt
index a10529118f87e..e616bbc63ce70 100644
--- a/ext/xmlreader/tests/003-get-errors.phpt
+++ b/ext/xmlreader/tests/003-get-errors.phpt
@@ -31,8 +31,12 @@ while ($reader->read()) {
echo $reader->value . "\n";
// Test for call with an empty string argument
- $attr = $reader->getAttribute('');
- var_dump($attr);
+ try {
+ $reader->getAttribute('');
+ } catch (ValueError $exception) {
+ echo $exception->getMessage() . "\n";
+ }
+
// Ensure that node pointer has not changed position
echo $reader->name . ": ";
echo $reader->value . "\n";
@@ -61,13 +65,11 @@ $reader->close();
---EXPECTF--
+--EXPECT--
book
bool(true)
num: 1
-
-Warning: XMLReader::getAttribute(): Argument cannot be an empty string in %s on line %d
-bool(false)
+XMLReader::getAttribute(): Argument #1 ($name) cannot be empty
num: 1
NULL
num: 1
diff --git a/ext/xmlreader/tests/003-move-errors.phpt b/ext/xmlreader/tests/003-move-errors.phpt
index a00dbaf52442b..24431b6a7e2a0 100644
--- a/ext/xmlreader/tests/003-move-errors.phpt
+++ b/ext/xmlreader/tests/003-move-errors.phpt
@@ -31,8 +31,12 @@ while ($reader->read()) {
echo $reader->value . "\n";
// Test for call with an empty string argument
- $attr = $reader->moveToAttribute('');
- var_dump($attr);
+ try {
+ $reader->moveToAttribute('');
+ } catch (ValueError $exception) {
+ echo $exception->getMessage() . "\n";
+ }
+
// Ensure that node pointer has not changed position
echo $reader->name . ": ";
echo $reader->value . "\n";
@@ -60,13 +64,11 @@ $reader->close();
---EXPECTF--
+--EXPECT--
book
bool(true)
num: 1
-
-Warning: XMLReader::moveToAttribute(): Attribute Name is required in %s on line %d
-bool(false)
+XMLReader::moveToAttribute(): Argument #1 ($name) cannot be empty
num: 1
bool(false)
num: 1
diff --git a/ext/xmlreader/tests/003.phpt b/ext/xmlreader/tests/003.phpt
index c52c932c974a2..9ecf9d62da7ca 100644
--- a/ext/xmlreader/tests/003.phpt
+++ b/ext/xmlreader/tests/003.phpt
@@ -68,14 +68,18 @@ while ($reader->read()) {
var_dump($reader->moveToAttributeNo(20));
var_dump($reader->moveToAttribute('missing-attribute'));
- var_dump($reader->moveToAttribute(''));
+ try {
+ $reader->moveToAttribute('');
+ } catch (ValueError $exception) {
+ echo $exception->getMessage() . "\n";
+ }
}
}
}
$reader->close();
unlink($filename);
?>
---EXPECTF--
+--EXPECT--
num: 1
idx: 2
num: 1
@@ -84,6 +88,4 @@ num: 1
idx: 2
bool(false)
bool(false)
-
-Warning: XMLReader::moveToAttribute(): Attribute Name is required in %s on line %d
-bool(false)
+XMLReader::moveToAttribute(): Argument #1 ($name) cannot be empty
diff --git a/ext/xmlreader/tests/007.phpt b/ext/xmlreader/tests/007.phpt
index 796b9fa05c9d4..6b8cab43f0f7f 100644
--- a/ext/xmlreader/tests/007.phpt
+++ b/ext/xmlreader/tests/007.phpt
@@ -42,13 +42,15 @@ $reader->close();
$reader = new XMLReader();
$reader->XML($xmlstring);
-if ($reader->setRelaxNGSchema('')) {
- echo 'failed';
+try {
+ $reader->setRelaxNGSchema('');
+} catch (ValueError $exception) {
+ echo $exception->getMessage() . "\n";
}
+
$reader->close();
?>
---EXPECTF--
+--EXPECT--
file relaxNG: ok
string relaxNG: ok
-
-Warning: XMLReader::setRelaxNGSchema(): Schema data source is required in %s on line %d
+XMLReader::setRelaxNGSchema(): Argument #1 ($filename) cannot be empty
diff --git a/ext/xmlreader/tests/014.phpt b/ext/xmlreader/tests/014.phpt
index fca94d2b1f3ef..67c0e9fb93a6c 100644
--- a/ext/xmlreader/tests/014.phpt
+++ b/ext/xmlreader/tests/014.phpt
@@ -24,12 +24,24 @@ while ($reader->read()) {
// Find a node to try modifying
if ($reader->nodeType == XMLREADER::ELEMENT && $reader->name == 'book') {
// Try to set the value of the element from book1 to movie1
- $reader->value = 'movie1';
+ try {
+ $reader->value = 'movie1';
+ } catch (Error $exception) {
+ echo $exception->getMessage() . "\n";
+ }
// Try to set the value of the first "num" attribute from "1" to "num attribute 1"
$attr = $reader->moveToFirstAttribute();
- $reader->value = 'num attribute 1';
+ try {
+ $reader->value = 'num attribute 1';
+ } catch (Error $exception) {
+ echo $exception->getMessage() . "\n";
+ }
// Try to set the name of the first attribute from "num" to "number"
- $reader->name = 'number';
+ try {
+ $reader->name = 'number';
+ } catch (Error $exception) {
+ echo $exception->getMessage() . "\n";
+ }
}
}
}
@@ -41,9 +53,7 @@ $reader->close();
---EXPECTF--
-Warning: main(): Cannot write to read-only property in %s on line %d
-
-Warning: main(): Cannot write to read-only property in %s on line %d
-
-Warning: main(): Cannot write to read-only property in %s on line %d
+--EXPECT--
+Cannot write to read-only property
+Cannot write to read-only property
+Cannot write to read-only property
diff --git a/ext/xmlreader/tests/015-get-errors.phpt b/ext/xmlreader/tests/015-get-errors.phpt
index 5f17326b1b6aa..850d042a4b0c8 100644
--- a/ext/xmlreader/tests/015-get-errors.phpt
+++ b/ext/xmlreader/tests/015-get-errors.phpt
@@ -26,8 +26,12 @@ while ($reader->read()) {
$attr = $reader->moveToNextAttribute();
// Test for missing namespace argument
- $attr = $reader->getAttributeNs('idx', null);
- var_dump($attr);
+ try {
+ $attr = $reader->getAttributeNs('idx', null);
+ } catch (ValueError $exception) {
+ echo $exception->getMessage() . "\n";
+ }
+
echo $reader->name . ": ";
echo $reader->value . "\n";
}
@@ -41,7 +45,6 @@ $reader->close();
---EXPECTF--
-Warning: XMLReader::getAttributeNs(): Attribute Name and Namespace URI cannot be empty in %s on line %d
-bool(false)
+--EXPECT--
+XMLReader::getAttributeNs(): Argument #2 ($namespaceURI) cannot be empty
ns1:num: 1
diff --git a/ext/xmlreader/tests/015-move-errors.phpt b/ext/xmlreader/tests/015-move-errors.phpt
index 5263b555b6ea8..2b5580d7ea4fd 100644
--- a/ext/xmlreader/tests/015-move-errors.phpt
+++ b/ext/xmlreader/tests/015-move-errors.phpt
@@ -24,7 +24,11 @@ while ($reader->read()) {
// Find the book node
if ($reader->nodeType == XMLREADER::ELEMENT && $reader->name == 'book') {
// Test for missing namespace argument
- $attr = $reader->moveToAttributeNs('idx', null);
+ try {
+ $reader->moveToAttributeNs('idx', null);
+ } catch (ValueError $exception) {
+ echo $exception->getMessage() . "\n";
+ }
}
}
}
@@ -36,5 +40,5 @@ $reader->close();
---EXPECTF--
-Warning: XMLReader::moveToAttributeNs(): Attribute Name and Namespace URI cannot be empty in %s on line %d
+--EXPECT--
+XMLReader::moveToAttributeNs(): Argument #2 ($namespaceURI) cannot be empty
diff --git a/ext/xmlreader/tests/expand_error.phpt b/ext/xmlreader/tests/expand_error.phpt
index 2813e836d9f76..59ab0365b6043 100644
--- a/ext/xmlreader/tests/expand_error.phpt
+++ b/ext/xmlreader/tests/expand_error.phpt
@@ -13,7 +13,13 @@ $xmlstring = '
new book';
$reader = new XMLReader();
-var_dump($reader->expand());
+
+try {
+ $reader->expand();
+} catch (Error $exception) {
+ echo $exception->getMessage() . "\n";
+}
+
$reader->close();
$reader = new XMLReader();
@@ -22,8 +28,7 @@ var_dump($reader->expand());
$reader->close();
?>
--EXPECTF--
-Warning: XMLReader::expand(): Load Data before trying to expand in %s on line %d
-bool(false)
+Data must be loaded before expanding
-Warning: XMLReader::expand(): An Error Occurred while expanding in %s on line %d
+Warning: XMLReader::expand(): An Error Occurred while expanding in %s on line %d
bool(false)
diff --git a/ext/xmlreader/tests/next_basic.phpt b/ext/xmlreader/tests/next_basic.phpt
index e0663c23d3509..70d540c2c20ba 100644
--- a/ext/xmlreader/tests/next_basic.phpt
+++ b/ext/xmlreader/tests/next_basic.phpt
@@ -9,8 +9,19 @@ $xml = '
';
$reader = new XMLReader();
-$reader->read();
-$reader->next();
+
+try {
+ $reader->read();
+} catch (Error $exception) {
+ echo $exception->getMessage() . "\n";
+}
+
+try {
+ $reader->next();
+} catch (Error $exception) {
+ echo $exception->getMessage() . "\n";
+}
+
$reader->close();
$reader->XML($xml);
@@ -28,10 +39,9 @@ echo $reader->name . PHP_EOL;
$reader->close();
?>
---EXPECTF--
-Warning: XMLReader::read(): Load Data before trying to read in %s on line %d
-
-Warning: XMLReader::next(): Load Data before trying to read in %s on line %d
+--EXPECT--
+Data must be loaded before reading
+Data must be loaded before reading
node1
bool(true)
node3
diff --git a/ext/xmlreader/tests/schema-bad.xsd b/ext/xmlreader/tests/schema-bad.xsd
new file mode 100644
index 0000000000000..d72af314604e3
--- /dev/null
+++ b/ext/xmlreader/tests/schema-bad.xsd
@@ -0,0 +1 @@
+asd
diff --git a/ext/xmlreader/tests/setParserProperty_error.phpt b/ext/xmlreader/tests/setParserProperty_error.phpt
index 755a4e4772c4b..9bdb0baa03259 100644
--- a/ext/xmlreader/tests/setParserProperty_error.phpt
+++ b/ext/xmlreader/tests/setParserProperty_error.phpt
@@ -10,9 +10,12 @@ $xml = 'new bookXML($xml);
-var_dump($reader->setParserProperty(-1, true));
+try {
+ $reader->setParserProperty(-1, true);
+} catch (ValueError $exception) {
+ echo $exception->getMessage() . "\n";
+}
$reader->close();
?>
---EXPECTF--
-Warning: XMLReader::setParserProperty(): Invalid parser property in %s on line %d
-bool(false)
+--EXPECT--
+XMLReader::setParserProperty(): Argument #1 ($property) must be a valid parser property
diff --git a/ext/xmlreader/tests/setSchema_error.phpt b/ext/xmlreader/tests/setSchema_error.phpt
index 31bd4d6e3ed96..2984455de8bba 100644
--- a/ext/xmlreader/tests/setSchema_error.phpt
+++ b/ext/xmlreader/tests/setSchema_error.phpt
@@ -6,24 +6,38 @@ XMLReader: setSchema Error
setSchema(''));
+try {
+ $reader->setSchema('');
+} catch (ValueError $exception) {
+ echo $exception->getMessage() . "\n";
+}
$reader->close();
$reader = new XMLReader();
-var_dump($reader->setSchema('schema-missing-file.xsd'));
+try {
+ $reader->setSchema('schema-missing-file.xsd');
+} catch (Error $exception) {
+ echo $exception->getMessage() . "\n";
+}
$reader->close();
$reader = new XMLReader();
-var_dump($reader->setSchema('schema-empty.xsd'));
+try {
+ $reader->setSchema('schema-empty.xsd');
+} catch (Error $exception) {
+ echo $exception->getMessage() . "\n";
+}
+
+$reader = new XMLReader();
+$reader->XML(<<
+
+EOF);
+var_dump(@$reader->setSchema('schema-bad.xsd'));
$reader->close();
?>
---EXPECTF--
-
-Warning: XMLReader::setSchema(): Schema data source is required in %s on line %d
-bool(false)
-
-Warning: XMLReader::setSchema(): Unable to set schema. This must be set prior to reading or schema contains errors. in %s on line %d
-bool(false)
-
-Warning: XMLReader::setSchema(): Unable to set schema. This must be set prior to reading or schema contains errors. in %s on line %d
+--EXPECT--
+XMLReader::setSchema(): Argument #1 ($filename) cannot be empty
+Schema must be set prior to reading
+Schema must be set prior to reading
bool(false)