summaryrefslogtreecommitdiff
path: root/ext/dom/node.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/dom/node.c')
-rw-r--r--ext/dom/node.c56
1 files changed, 51 insertions, 5 deletions
diff --git a/ext/dom/node.c b/ext/dom/node.c
index 6aabc5e1e9..6a6c0fe74d 100644
--- a/ext/dom/node.c
+++ b/ext/dom/node.c
@@ -65,13 +65,23 @@ Since:
int dom_node_node_name_read(dom_object *obj, zval **retval TSRMLS_DC)
{
xmlNode *nodep;
+ xmlNsPtr ns;
char *str = NULL;
+ xmlChar *qname = NULL;
nodep = dom_object_get_node(obj);
switch (nodep->type) {
case XML_ATTRIBUTE_NODE:
case XML_ELEMENT_NODE:
+ ns = nodep->ns;
+ if (ns != NULL && ns->prefix) {
+ qname = xmlStrdup(ns->prefix);
+ qname = xmlStrcat(qname, ":");
+ }
+ qname = xmlStrcat(qname, nodep->name);
+ str = qname;
+ break;
case XML_DOCUMENT_TYPE_NODE:
case XML_DTD_NODE:
case XML_PI_NODE:
@@ -113,6 +123,10 @@ int dom_node_node_name_read(dom_object *obj, zval **retval TSRMLS_DC)
} else {
ZVAL_EMPTY_STRING(*retval);
}
+
+ if (qname != NULL) {
+ xmlFree(qname);
+ }
return SUCCESS;
@@ -654,9 +668,21 @@ Since: DOM Level 3
*/
int dom_node_base_uri_read(dom_object *obj, zval **retval TSRMLS_DC)
{
- /* TODO: Implement this feature */
+ xmlNode *nodep;
+ xmlChar *baseuri;
+
+ nodep = dom_object_get_node(obj);
+
ALLOC_ZVAL(*retval);
- ZVAL_NULL(*retval);
+
+ baseuri = xmlNodeGetBase(nodep->doc, nodep);
+ if (baseuri) {
+ ZVAL_STRING(*retval, (char *) (baseuri), 1);
+ xmlFree(baseuri);
+ } else {
+ ZVAL_NULL(*retval);
+ }
+
return SUCCESS;
}
@@ -1315,18 +1341,38 @@ PHP_FUNCTION(dom_node_lookup_prefix)
/* {{{ proto boolean dom_node_is_default_namespace(string namespaceURI);
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-isDefaultNamespace
+URL: http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-isDefaultNamespace
Since: DOM Level 3
*/
PHP_FUNCTION(dom_node_is_default_namespace)
{
- DOM_NOT_IMPLEMENTED();
+ zval *id;
+ xmlNodePtr nodep;
+ dom_object *intern;
+ xmlNsPtr nsptr;
+ int uri_len = 0;
+ char *uri;
+
+ DOM_GET_THIS_OBJ(nodep, id, xmlNodePtr, intern);
+
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &uri, &uri_len) == FAILURE) {
+ return;
+ }
+
+ if (uri_len > 0) {
+ nsptr = xmlSearchNs(nodep->doc, nodep, NULL);
+ if (nsptr && xmlStrEqual(nsptr->href, uri)) {
+ RETURN_TRUE;
+ }
+ }
+
+ RETURN_FALSE;
}
/* }}} end dom_node_is_default_namespace */
/* {{{ proto domstring dom_node_lookup_namespace_uri(string prefix);
-URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-lookupNamespaceURI
+URL: http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-lookupNamespaceURI
Since: DOM Level 3
*/
PHP_FUNCTION(dom_node_lookup_namespace_uri)