У меня есть документ XHTML.Я использую XHR для импорта другого XML-документа, который должен быть XHTML, за исключением того, что автор забыл поместить xmlns
в корень.Таким образом, все узлы в документе XML не имеют пространства имен.
Когда я импортирую узел из этого другого документа и добавляю его в свой документ, я получаю узел, который выглядит правильно (например, <h1>Hi Mom!</h1>
), но имеетнет пространства имен.Таким образом, веб-браузер применяет display:inline
.
. Я мог бы исправить это, используя код, подобный следующему (непроверенный) ... но я бы не стал этого делать, если существует лучший маршрут:
function changeNodeNamespace(node,namespace){
var dup = document.createElementNS(namespace,node.nodeName);
if (node.hasAttributes()){
for (var a=node.attributes,i=a.length;i--;){
dup.setAttributeNS(a[i].namespaceURI,a[i].nodeName,a[i].value);
}
}
if (node.hasChildNodes()){
for (var a=node.childNodes,i=0,len=a.length;i<len;++i){
if (a[i].nodeType==1){ // ELEMENT_NODE
dup.appendChild(changeNodeNamespace(a[i],namespace));
}else{
dup.appendChild(a[i].cloneNode(false));
}
}
}
return dup;
}
Кроме повторной авторизации документов, которые я импортирую, чтобы иметь правильное пространство имен, или рекурсивное воссоздание каждого элемента / атрибута / текстового узла в новом пространстве имен на основе оригиналов , я могу импортировать элементысами и как-то изменить свое пространство имен на http://www.w3.org/1999/xhtml
?