Изменить пространство имен узла DOM до / во время / после импорта - PullRequest
2 голосов
/ 23 марта 2012

У меня есть документ 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?

1 Ответ

1 голос
/ 17 мая 2012

XSLT может сделать свое дело , а библиотека, такая как Sarissa или AJAXSLT , может помочь упростить синтаксис JavaScript.

...