summaryrefslogtreecommitdiff
path: root/ext/xmlreader/php_xmlreader.c
diff options
context:
space:
mode:
authorMarcus Boerger <helly@php.net>2006-03-31 20:50:29 +0000
committerMarcus Boerger <helly@php.net>2006-03-31 20:50:29 +0000
commite08784867ce578c377b281ab04a425406970bab9 (patch)
tree5ebba0f17fc6373b8da6368c549a254d7759fa42 /ext/xmlreader/php_xmlreader.c
parentec376e510c5910a7e625d9edc640a009bf2b2366 (diff)
downloadphp-git-e08784867ce578c377b281ab04a425406970bab9.tar.gz
- Add XMLReader::setSchema
Diffstat (limited to 'ext/xmlreader/php_xmlreader.c')
-rw-r--r--ext/xmlreader/php_xmlreader.c46
1 files changed, 42 insertions, 4 deletions
diff --git a/ext/xmlreader/php_xmlreader.c b/ext/xmlreader/php_xmlreader.c
index fb0c274eb3..793f03fab0 100644
--- a/ext/xmlreader/php_xmlreader.c
+++ b/ext/xmlreader/php_xmlreader.c
@@ -976,7 +976,7 @@ PHP_METHOD(xmlreader, setParserProperty)
}
/* }}} */
-/* {{{ proto boolean XMLReader::setRelaxNGSchemaSource(string filename)
+/* {{{ proto boolean XMLReader::setRelaxNGSchema(string filename)
Sets the string that the the XMLReader will parse. */
PHP_METHOD(xmlreader, setRelaxNGSchema)
{
@@ -992,10 +992,47 @@ PHP_METHOD(xmlreader, setRelaxNGSchemaSource)
}
/* }}} */
+/* {{{ proto boolean XMLReader::setSchema(string filename)
+Use W3C XSD schema to validate the document as it is processed. Activation is only possible before the first Read(). */
+PHP_METHOD(xmlreader, setSchema)
+{
+#ifdef LIBXML_SCHEMAS_ENABLED
+ zval *id;
+ int source_len = 0, retval = -1;
+ xmlreader_object *intern;
+ char *source;
+
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s!", &source, &source_len) == FAILURE) {
+ return;
+ }
+
+ if (source != NULL && !source_len) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Schema data source is required");
+ RETURN_FALSE;
+ }
+
+ id = getThis();
+
+ intern = (xmlreader_object *)zend_object_store_get_object(id TSRMLS_CC);
+ if (intern && intern->ptr) {
+ retval = xmlTextReaderSchemaValidate(intern->ptr, source);
+
+ if (retval == 0) {
+ RETURN_TRUE;
+ }
+ }
+
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to set schema. This must be set prior to reading or schema contains errors.");
+
+ RETURN_FALSE;
+#else
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "No Schema support built into libxml.");
+
+ RETURN_FALSE;
+#endif
+}
+
/* TODO
-XMLPUBFUN int XMLCALL
- xmlTextReaderSchemaValidate (xmlTextReaderPtr reader,
- const char *xsd);
XMLPUBFUN int XMLCALL
xmlTextReaderSetSchema (xmlTextReaderPtr reader,
xmlSchemaPtr schema);
@@ -1137,6 +1174,7 @@ static zend_function_entry xmlreader_functions[] = {
PHP_ME(xmlreader, setParserProperty, NULL, ZEND_ACC_PUBLIC)
PHP_ME(xmlreader, setRelaxNGSchema, NULL, ZEND_ACC_PUBLIC)
PHP_ME(xmlreader, setRelaxNGSchemaSource, NULL, ZEND_ACC_PUBLIC)
+ PHP_ME(xmlreader, setSchema, NULL, ZEND_ACC_PUBLIC)
PHP_ME(xmlreader, XML, NULL, ZEND_ACC_PUBLIC|ZEND_ACC_ALLOW_STATIC)
PHP_ME(xmlreader, expand, NULL, ZEND_ACC_PUBLIC)
{NULL, NULL, NULL}