TransWikia.com

Модификация XML при помощи классов пакета org.w3c.dom.*

Stack Overflow на русском Asked by Ilya Weber on December 30, 2021

Буду благодарен за подсказки в объяснении правильной работы с классами Document, Element и Node, а так же методами Document.importNode() и Node.appendChild().

Есть задача объединить 2 xml (выполнить merge), существующие инструменты не очень подходят.

Файл: xml1.xml

<root>
  <A>
    <element1>value_A</element1>
  </A>
</root>

Файл: xml2..xml

<root>
  <B>
    <element2>value_B2</element2>
    <element3>value_B3</element3>
  </B>
</root>

Ожидаемый результат:

<root>
  <A>
    <element1>value_A</element1>
  </A>
  <B>
    <element2>value_B2</element2>
    <element3>value_B3</element3>
  </B>
</root>

Пытаюсь сделать задачу, опираясь на вышеуказанные классы.

@Before
public void setUp() {
    xmlFileStream1 = TestXml.class.getClassLoader().getResourceAsStream("xml1.xml");
    xmlFileStream2 = TestXml.class.getClassLoader().getResourceAsStream("xml2.xml");
}

@Test
public void testXmlUnion() throws Exception {
    DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
    DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
    Document baseDoc = docBuilder.parse(xmlFileStream1);
    Element baseRoot = baseDoc.getDocumentElement();
    Document secondaryDoc = docBuilder.parse(xmlFileStream2);
    Element secondaryRoot = secondaryDoc.getDocumentElement();
    Node noteToAppend = secondaryRoot.getChildNodes().item(0);
    Node importedNodeToAppend = baseDoc.importNode(noteToAppend, true);
    baseRoot.appendChild(importedNodeToAppend);
}

В итоге эта Node (которая noteToAppend) не добавляется ни к Объекту baseRoot, ни к baseDoc

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP