Как добавить тот же элемент, что и у ребенка. Я хочу что-то вроде этого:
<family>
<parent name = "P1">
<child name = "P1C1">
<child name = "P1C1C1"/>
<child name = "P1C1C2"/>
</child>
<child name = "P1C2"/>
<child name = "P1C3">
<child name = "P1C3C1"/>
</child>
</parent>
<parent name = "P2">
<child name = "P2C1">
<child name = "P2C1C1"/>
</child>
<child name = "P2C2">
<child name = "P2C2C1"/>
</child>
</parent>
</family>
Если я пытаюсь создать дочерний элемент и добавить к нему еще один дочерний элемент, я получаю:
HIERARCHY_REQUEST_ERR: была предпринята попытка вставить узел, где это не разрешено.
Как мы можем сгенерировать вышеуказанное дерево XML?
Также посмотрите более широкую картину для решения, которое я строю:
Создание XML-сопоставления рекурсивного поиска в каталоге
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
public class ChildofChildXML {
public static void main(String[] args) {
try {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = factory.newDocumentBuilder();
Document doc = docBuilder.newDocument();
Element root = doc.createElement("family");
doc.appendChild(root);
Element parent = doc.createElement("parent");
parent.setAttribute("name","P1");
root.appendChild(parent);
Element childElement = doc.createElement("child");
childElement.setAttribute("name","P1C1");
parent.appendChild(childElement);
Element childElement2 = doc.createElement("child"); //Works
childElement2.setAttribute("name","P1C1C1");
childElement.appendChild(childElement2);
/*
childElement = doc.createElement("child");
childElement.setAttribute("name","P1C1C1");
// Not allowed - HIERARCHY_REQUEST_ERR:
childElement.appendChild(childElement);
*/
childElement = doc.createElement("child");
childElement.setAttribute("name","P1C2");
parent.appendChild(childElement);
TransformerFactory tranFactory = TransformerFactory.newInstance();
Transformer aTransformer = tranFactory.newTransformer();
aTransformer.setOutputProperty("indent", "yes");
Source src = new DOMSource(doc);
Result dest = new StreamResult(System.out);
aTransformer.transform(src, dest);
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}
Теперь код должен быть объединен с рекурсивным вызовом 'раскрыть архив', и именно здесь я задаюсь вопросом, как добавить дочерний элемент потомства, поскольку мне нужно применить решение к рекурсии - где я расширяю архивный файл верхнего уровня. используя java.util.zip. Здесь эквивалент папки, содержащей архив верхнего уровня, являющейся родительским и последующими узлами, рекурсивно эквивалентен содержимому архивов. Так что у уха может быть война или банка. Война может иметь jsp под ней, и WEB-INF / lib / x.jar и WEB-INF / lib / x.jar необходимо снова развернуть и так далее, и эти отношения ребенок -> ребенок -> ребенок должны быть построен из родителей.