У меня есть документ XHTML. Я использую XHR для импорта другого XML-документа, который должен быть XHTML, за исключением того, что автор забыл положить xmlns
в корневой каталог. Таким образом, все узлы в XML-документе не имеют пространства имен.Изменение пространства имен узла DOM до/во время/после импорта
Когда я импортирую узел из этого другого документа и добавлю его в свой документ, я получаю узел, который выглядит правильно (например, <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;
}
Кроме пересочинения документы я импортировать, чтобы иметь правильное пространство имен, или -рекурсивное воссоздание каждого элемента/атрибута/textnode в новом пространстве имен на основе оригиналов, можно ли импортировать сами элементы и каким-то образом изменить их пространство имен на http://www.w3.org/1999/xhtml
?
Можете ли вы изменить пространство имен по умолчанию на XHTML и использовать пространство имен для всего остального? Существует также [createElementNS] (http://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-DocCrElNS) для создания элементов в определенном пространстве имен. – RobG
@RobG Документ хоста имеет пространство имен XHTML по умолчанию. Загруженный документ не работает, и в этом проблема. Если я отредактирую этот документ, чтобы иметь пространство имен XHTML по умолчанию (таким образом, применяя пространство имен ко всем потомкам), все работает нормально. Возникает вопрос: _если я загружаю XML-документ с узлом в «неправильном» пространстве имен, существует ли способ их переноса без использования рекурсивных 'createElementNS' и' setAttribute' и 'createTextNode' и т. Д. Для создания подобных узлов в другом namespace? _ – Phrogz