Удалите дублирующие узлы при объединении xmls и обновите имя атрибута - PullRequest
0 голосов
/ 22 мая 2019

Я хотел бы игнорировать дублирующиеся узлы при объединении xmls, а также, если есть какие-либо изменения значений атрибутов, я бы хотел их обновить.

Я ссылался на Xml Объединить несколько Xmls вновый XML-файл , который совершенно не ответил на мой вопрос.

Base.xml

    <?xml version="1.0" encoding="utf-8" ?>
    <rss version="2.0">
    <Configs>
        <default name="default">
            <something>default</something>
        </default>

    </Configs>
    <Ratings>
        <body>

        </body>
    </Ratings>
   </rss>

Input1.xml

<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0">
    <Configs>
        <default name="default">
            <something>default</something>
        </default>
        <Config name="test1">
            <title>Title 1</title>
            <author>Author1</author>
        </Config>
        <Config name="test2">
            <title>Title 2</title>
            <author>Author2</author>
        </Config>
    </Configs>
    <optional>I dont want this to be copied</optional>
    <Ratings>
        <body>
            <Items name = "object 1">
                <something1>something1</something1>
            </Items>
        </body>
    </Ratings>
</rss>

Input2.xml

<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0">
    <Configs>
        <default name="default">
            <something>default</something>
        </default>
        <Config name="test3">
            <title>Title 3</title>
            <author>Author3</author>
        </Config>
        <Config name="test4">
            <title>Title 4</title>
            <author>Author4</author>
        </Config>
    </Configs>
    <optional>I dont want this to be copied</optional>
    <Ratings>
        <body>
            <Items name = "object 2">
                <something1>something2</something1>
            </Items>
        </body>
    </Ratings>
</rss>

Ожидается -> Result.xml

<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0">
    <Configs>
        <default name="default">
            <something>default</something>
        </default>
        <Config name="test1">
            <title>Title 1</title>
            <author>Author1</author>
        </Config>
        <Config name="test2">
            <title>Title 2</title>
            <author>Author2</author>
        </Config>
    </Configs>
    <Ratings>
        <body>
            <Items name = "object 1">
                <something1>something1</something1>
            </Items>
            <Items name = "object 2">
                <something1>this is updated value</something1>
            </Items>
        </body>
    </Ratings>
</rss>

Здесь обновляется следующее:

<Items name = "object 2">
                    <something1>this is updated value</something1>
                </Items>

Для удаления дублирующего узла я попытался использовать

Document inputDoc = db.parse(inputFile(s));

        NodeList configNodeList = inputDoc.getElementsByTagName("Configs");

        for (int i = 0; i < configNodeList.getLength(); i++) {
        Node copiedNode = resultDoc.importNode(configNodeList.item(i), true);
        NamedNodeMap attributes = copiedNode.getAttributes();
        attributes.removeNamedItem("<default name=\"default\">");
        resultConfigsNode.appendChild(copiedNode);
        }

ОБНОВЛЕНИЕ:

Мне удалось удалить / игнорировать дублирующиеся узлы

String removeDuplicate = "name=\"default\"";

                if (attributes.item(0).toString().equalsIgnoreCase(removeDuplicate)) {
                    continue;
                }

Теперь нужна только помощь, чтобы обновить следующие

<Items name = "object 2">
                <something1>this is updated value</something1>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...