Ejemplo n.º 1
0
/**
 * Build an element with a namespace.
 * @param name	Qualified element name.
 * @param uri	URI of the namespace.
 */
void *Element::makeNS(String name, String uri) {
	int len;
	xmlNodePtr node = 0;
	const xmlChar *local_name = xmlSplitQName3(name, &len);
	if(!local_name) {
		node = xmlNewNode(NULL, name);
		NODE(node)->ns = xmlNewNs(node, uri, NULL);
	}
	else {
		node = xmlNewNode(NULL, local_name);
		char_t prefix[len + 1];
		memcpy(prefix, &name, len);
		prefix[len] = '\0';
		NODE(node)->ns = xmlNewNs(node, uri, prefix);
	}
	return node;
}
Ejemplo n.º 2
0
int
xmljMatchNS (const xmlChar * uri, const xmlChar * localName, xmlNodePtr node)
{
  xmlNsPtr ns;
  const xmlChar *nodeLocalName;
  int *len;
  int ret;

  switch (node->type)
    {
    case XML_ELEMENT_NODE:
    case XML_ATTRIBUTE_NODE:
      len = (int *) malloc (sizeof (int));
      if (xmlSplitQName3 (node->name, len) != NULL)
        {
          nodeLocalName = node->name + (*len);
        }
      else
        {
          nodeLocalName = node->name;
        }
      free (len);
      ns = node->ns;
      if (ns == NULL || ns->href == NULL)
        {
          if (uri != NULL)
            {
              return 0;
            }
          ret = xmlStrcmp (localName, nodeLocalName);
        }
      else
        {
          if (uri == NULL)
            {
              return 0;
            }
          ret = (xmlStrcmp (localName, nodeLocalName) &&
                 xmlStrcmp (uri, ns->href));
        }
      return ret;
    default:
      return 1;
    }
}
Ejemplo n.º 3
0
static xmlNodePtr dom_get_dom1_attribute(xmlNodePtr elem, xmlChar *name) /* {{{ */
{
    int len;
    const xmlChar *nqname;

	nqname = xmlSplitQName3(name, &len);
	if (nqname != NULL) {
		xmlNsPtr ns;
		xmlChar *prefix = xmlStrndup(name, len);
		if (prefix && xmlStrEqual(prefix, (xmlChar *)"xmlns")) {
			ns = elem->nsDef;
			while (ns) {
				if (xmlStrEqual(ns->prefix, nqname)) {
					break;
				}
				ns = ns->next;
			}
			xmlFree(prefix);
			return (xmlNodePtr)ns;
		}
		ns = xmlSearchNs(elem->doc, elem, prefix);
		if (prefix != NULL) {
			xmlFree(prefix);
		}
		if (ns != NULL) {
			return (xmlNodePtr)xmlHasNsProp(elem, nqname, ns->href);
		}
	} else {
		if (xmlStrEqual(name, (xmlChar *)"xmlns")) {
			xmlNsPtr nsPtr = elem->nsDef;
			while (nsPtr) {
				if (nsPtr->prefix == NULL) {
					return (xmlNodePtr)nsPtr;
				}
				nsPtr = nsPtr->next;
			}
			return NULL;
		}
	}
	return (xmlNodePtr)xmlHasNsProp(elem, name, NULL);
}