summaryrefslogtreecommitdiff
path: root/ext/dom/php_dom.c
diff options
context:
space:
mode:
authorRob Richards <rrichards@php.net>2003-07-27 17:57:06 +0000
committerRob Richards <rrichards@php.net>2003-07-27 17:57:06 +0000
commit43bc2f0b6dcb1af71b2a7770b0c6eb98617c4a89 (patch)
tree7e448e9ef526a841ab0f1db017a233c3c6028030 /ext/dom/php_dom.c
parentb156ac970315428dbbd817af8828b51bd0e273ce (diff)
downloadphp-git-43bc2f0b6dcb1af71b2a7770b0c6eb98617c4a89.tar.gz
reworking xml namespace support
add node lookupNamespaceURI and lookupPrefix add attr isId
Diffstat (limited to 'ext/dom/php_dom.c')
-rw-r--r--ext/dom/php_dom.c63
1 files changed, 24 insertions, 39 deletions
diff --git a/ext/dom/php_dom.c b/ext/dom/php_dom.c
index 9a141fe194..17964978ef 100644
--- a/ext/dom/php_dom.c
+++ b/ext/dom/php_dom.c
@@ -680,7 +680,7 @@ PHP_MSHUTDOWN_FUNCTION(dom)
uncomment the following line, this will tell you the amount of not freed memory
and the total used memory into apaches error_log */
/* xmlMemoryDump();*/
-
+xmlMemoryDump();
return SUCCESS;
}
@@ -1190,51 +1190,36 @@ void dom_set_old_ns(xmlDoc *doc, xmlNs *ns) {
}
/* }}} end dom_set_old_ns */
+int dom_check_qname(char *qname, char **localname, char **prefix, int uri_len, int name_len) {
+ int errorcode = 0;
-/* {{{ xmlNsPtr dom_get_ns(char *uri, char *qName, int uri_len, int qName_len, int *errorcode, char *localname) */
-xmlNsPtr dom_get_ns(char *uri, char *qName, int uri_len, int qName_len, int *errorcode, char **localname) {
- xmlNsPtr nsptr = NULL;
- xmlURIPtr uristruct;
- char *prefix = NULL;
+ if (uri_len > 0 && name_len > 0) {
+ *localname = xmlSplitQName2(qname, (xmlChar **) prefix);
+ if (*localname == NULL) {
+ *localname = xmlStrdup(qname);
+ }
+ if (*localname == NULL || (xmlStrchr(*localname, (xmlChar) ':') != NULL)) {
+ errorcode = NAMESPACE_ERR;
+ }
+ } else {
+ errorcode = NAMESPACE_ERR;
+ }
- *localname = NULL;
- *errorcode = 0;
+ return errorcode;
+}
- if (uri_len > 0 || qName_len > 0) {
- if (qName_len == 0 && uri_len > 0) {
- *errorcode = NAMESPACE_ERR;
- return nsptr;
- }
- if (qName_len > 0 && *errorcode == 0) {
- uristruct = xmlParseURI(qName);
- if (uristruct->opaque != NULL) {
- prefix = xmlStrdup(uristruct->scheme);
- *localname = xmlStrdup(uristruct->opaque);
- if (xmlStrchr(*localname, (xmlChar) ':') != NULL) {
- *errorcode = NAMESPACE_ERR;
- } else if (!strcmp (prefix, "xml") && strcmp(uri, XML_XML_NAMESPACE)) {
- *errorcode = NAMESPACE_ERR;
- }
- }
+/* {{{ xmlNsPtr dom_get_ns(xmlNodePtr nodep, char *uri, int *errorcode, char *prefix) */
+xmlNsPtr dom_get_ns(xmlNodePtr nodep, char *uri, int *errorcode, char *prefix) {
+ xmlNsPtr nsptr = NULL;
- /* TODO: Test that localname has no invalid chars
- php_dom_throw_error(INVALID_CHARACTER_ERR, TSRMLS_CC);
- */
+ *errorcode = 0;
- xmlFreeURI(uristruct);
-
- if (*errorcode == 0) {
- if (uri_len > 0 && prefix == NULL) {
- *errorcode = NAMESPACE_ERR;
- } else if (*localname != NULL) {
- nsptr = xmlNewNs(NULL, uri, prefix);
- }
- }
- }
+ if (! (prefix && !strcmp (prefix, "xml") && strcmp(uri, XML_XML_NAMESPACE))) {
+ nsptr = xmlNewNs(nodep, uri, prefix);
}
- if (prefix != NULL) {
- xmlFree(prefix);
+ if (nsptr == NULL) {
+ *errorcode = NAMESPACE_ERR;
}
return nsptr;