void DomElement::set_child_string_ns(const DomString &namespace_uri, const DomString &qualified_name, const DomString &value) { DomString local_name; DomString::size_type pos = qualified_name.find(L':'); if (pos != DomString::npos) local_name = qualified_name.substr(pos + 1); else local_name = qualified_name; DomElement element = named_item_ns(namespace_uri, local_name).to_element(); if (element.is_null()) { element = get_owner_document().create_element_ns(namespace_uri, qualified_name); append_child(element); } DomText dom_text = get_owner_document().create_text_node(value); if (element.get_first_child().is_text()) { DomNode temp_domnode = element.get_first_child(); replace_child(dom_text, temp_domnode); } else { element.append_child(dom_text); } }
DomString DomNode::find_namespace_uri(const DomString &qualified_name) const { static DomString xmlns_prefix("xmlns:"); static DomString xmlns_xml("xml"); static DomString xmlns_xml_uri("http://www.w3.org/XML/1998/namespace"); static DomString xmlns_xmlns("xmlns"); static DomString xmlns_xmlns_uri("http://www.w3.org/2000/xmlns/"); DomString prefix; DomString::size_type pos = qualified_name.find(':'); if (pos != DomString::npos) prefix = qualified_name.substr(0, pos); if (prefix == xmlns_xml) return xmlns_xml; else if (prefix == xmlns_xmlns || qualified_name == xmlns_xmlns) return xmlns_xmlns; DomDocument_Impl *doc_impl = (DomDocument_Impl *)impl->owner_document.lock().get(); const DomTreeNode *cur = impl->get_tree_node(); while (cur) { const DomTreeNode *cur_attr = cur->get_first_attribute(doc_impl); while (cur_attr) { std::string node_name = cur_attr->get_node_name(); if (prefix.empty()) { if (node_name == xmlns_xmlns) return cur_attr->get_node_value(); } else { if (node_name.substr(0, 6) == xmlns_prefix && node_name.substr(6) == prefix) return cur_attr->get_node_value(); } cur_attr = cur_attr->get_next_sibling(doc_impl); } cur = cur->get_parent(doc_impl); } return DomString(); }