Key commonKeyName (Key key1, Key key2) { // do not let removed namespaces escape key1 = key1.dup(); key2 = key2.dup(); if (key1.isBelowOrSame(key2)) return key2; if (key2.isBelowOrSame(key1)) return key1; if (key1.getNamespace() != key2.getNamespace()) { removeNamespace(key1); removeNamespace(key2); } Key ret(key1.getNamespace(), KEY_END); for (auto it1 = ++key1.begin(), it2 = ++key2.begin(); it1 != key1.end() && it2 != key2.end(); ++it1, ++it2) { if (*it1 != *it2) break; ret.addBaseName(*it1); } return ret; }
void removeDefaultNamespace(xmlNs *ns, xmlNode *node) { removeNamespace(&node->nsDef, ns); xmlAttr *attr; for (attr = node->properties; attr; attr = attr->next) { if (!attr->ns) continue; removeNamespace(&attr->ns, ns); } if (node->ns == ns) node->ns = NULL; xmlNode *child; for (child = xmlFirstElementChild(node); child; child = xmlNextElementSibling(child)) { removeDefaultNamespace(ns, child); } }