diff options
author | Rob Richards <rrichards@php.net> | 2003-07-27 17:57:06 +0000 |
---|---|---|
committer | Rob Richards <rrichards@php.net> | 2003-07-27 17:57:06 +0000 |
commit | 43bc2f0b6dcb1af71b2a7770b0c6eb98617c4a89 (patch) | |
tree | 7e448e9ef526a841ab0f1db017a233c3c6028030 /ext/dom/php_dom.c | |
parent | b156ac970315428dbbd817af8828b51bd0e273ce (diff) | |
download | php-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.c | 63 |
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; |