Как скопировать элементы внутри узла, который содержит тэг, совпадающий с именем узла, с помощью DOM Parser - PullRequest
2 голосов
/ 29 мая 2019

У меня есть входной XML-файл, мне нужно скопировать элементы и теги внутри, но проблема в том, что внутри узла <Name> есть еще один тег с именем <Name>. Как я могу скопировать в этой ситуации?

Input.xml

<?xml version="1.0" encoding="utf-8" ?>
 <data>
    <Name>
        <College name="test1">
            <Name>
                <dummyData1>dummy1</dummyData1>
                <dummyData2>dummy2</dummyData2>
            </Name>
        </College>
        <SomeData>SomeValue</SomeData>
    </Name>
    <SomeOtherTags>Not needed</SomeOtherTags>
    <Address>
        <Country name="test2">
            <City name = "city1">
                <zip>
                    <dummy3>dummy3</dummy3>
                </zip>
            </City>
        </Country>
    </Address>
 </data>

base.xml

<?xml version="1.0" encoding="utf-8" ?>
 <data>
    <Name>
    </Name>
    <Address>
    </Address>
 </data>

Это то, что я ожидаю

Output.xml

    <?xml version="1.0" encoding="utf-8" ?>
   <data>
    <Name>
        <College name="test1">
            <Name>
                <dummyData1>dummy1</dummyData1>
                <dummyData2>dummy2</dummyData2>
            </Name>
        </College>
    <SomeData>SomeValue</SomeData>
    </Name>
    <Address>
        <Country name="test2">
            <City name = "city1">
                <zip>
                    <dummy3>dummy3</dummy3>
                </zip>
            </City>
        </Country>
    </Address>
   </data>

Добавление недостающего кода, спасибо Andreas

Document outputDoc = db.parse(baseXml);
Document inputDoc = db.parse(inputXml);
Node outputNameNode = outputDoc.getElementsByTagName("Name").item(0);
Node outputAddressNode =     outputDoc.getElementsByTagName("Address").item(0);
NodeList nameNodeList = inputDoc.getElementsByTagName("Name");
System.out.println(nameNodeList.getLength());

for (int i = 0; i < nameNodeList.getLength(); i++) {
    System.out.println(nameNodeList.item(i));
    Node outputNode = outputDoc.importNode(nameNodeList.item(i), true);
    outputNameNode.appendChild(outputNode);
}
...