2015-05-06 1 views
0

предполагает следующий XML:Append клонировали дочерний узел к узлу клонированного

<outer> 
    <entity> 
     <id>123</id> 
     <subnode1> 
     <subnode2> 
    </entity> 
    <entity> 
     <id>124</id> 
     <subnode1> 
     <subnode2> 
    </entity> 
</outer> 

В целом, я хочу разделить узлы сущностей в отдельные файлы. Я извлек узлы сущности и сохранил их в пределах Карты с соответствующим текстовым значением в качестве ключа карты. Это абсолютно нормально для меня.

Теперь я хочу написать фрагменты в новые XML-файлы (идентификаторы, используемые в качестве имен файлов). Мне нужно сохранить внешние теги. Поэтому я называю следующий метод, чтобы получить внешние узлы:

private static Node cloneEmbeddingAncestors(final Node aItem) { 
    Node parent = aItem.getParentNode(); 
    if (parent.equals(((Element) aItem).getOwnerDocument())) { 
     // we've reached top level 
     return aItem.cloneNode(false); 
    } 
    Node clone = cloneEmbeddingAncestors(parent); 
    return clone.appendChild(aItem.cloneNode(false)); 
} 

При отладке последней строки этого метода, я получаю:

  • клон: «[наружный: нуль]» (хорошо выглядит)
  • aItem: "[объект: пустой]" (выглядит хорошо, а)
  • aItem.cloneNode (ложь): "[объект: нуль]" (выглядит хорошо, как хорошо)

Но: все выражение

  • clone.appendChild (aItem.cloneNode (ложь))

также поставляет "[объект: пустой]"?!? (Полученные в результате фрагменты XML также показывают только тег «entity». Я ожидал бы «внешний» тег в файле «внешний» узел на моем отладочном дисплее.)

Теперь, почему это так? Любая помощь очень обостряется! Благодаря!

ответ

0

Думаю, у меня это есть. Моя ошибка заключалась в вызове appendChild() в последнем возвратном выражении. appendChild() возвращает узел, но внутренний (дочерний, а не родительский). Идея этого метода заключалась в том, чтобы, конечно, рекурсивно вернуть внешний (родительский) узел. Поэтому, если я заменю последнюю строку кода на:

Node clone = cloneEmbeddingAncestors(parent); 
clone.appendChild(aItem.cloneNode(false)); 
return clone; 

... все работает как предусмотрено. Надежда, которая помогает другим в один прекрасный день.

 Смежные вопросы

  • Нет связанных вопросов^_^