Переместить узел с помощью Gpath - PullRequest
0 голосов
/ 16 января 2019

С учетом модели данных

<outerTag>
    <tagA>
        </tagB>
    </tagA>
    <tagC>
        <interestingContent>
           ...
        </interestingContent>
    </tagC> 
</outerTag>    

Я хочу переместить дочерние узлы <interestingContent> в <tagB>. Я не знаю возможного содержимого узлов для перемещения, они также могут иметь детей. В настоящее время я работаю с GPath и думал, что что-то простое, как это должно работать:

outertag.tagC.childNodes().each { node ->
    outerTag.tagA.tagB.appendNode(node)
}

Но хотя я могу читать имена и тексты с узлов, appendNode, похоже, не справляется. Хотя я теоретически мог читать атрибуты, текст и имя из дочерних элементов, использовать его для создания нового узла и добавлять этот узел, я чувствую, что это ненужно завершено, особенно потому, что это должна быть рекурсивная функция, поскольку узлы могут иметь Сам по себе ребенок.

1 Ответ

0 голосов
/ 16 января 2019

ваш код с небольшими изменениями

def outerTag = new XmlParser().parseText('''<outerTag>
    <tagA>
        <tagB/>
    </tagA>
    <tagC>
        <interestingContent a="a">1</interestingContent>
        <interestingContent a="b">2</interestingContent>
    </tagC>
</outerTag>''')

outerTag.tagC[0].children().each { child ->
    outerTag.tagA.tagB[0].append(child)
}
//reset value for tagC
outerTag.tagC[0].setValue("")

println groovy.xml.XmlUtil.serialize(outerTag)
...