Есть ли альтернатива XMLTask от ANT для замены XML без изменения структуры файла? - PullRequest
0 голосов
/ 03 декабря 2011

При использовании XMLParser из Groovy (и знакомых API-интерфейсов) для изменения содержимого текстового узла в XML он потеряет общую структуру при анализе файла и, следовательно, при записи обратно в файл. То есть пробелы меняются, комментарии удаляются, dtd-ссылки удаляются.

Существует библиотека ANT с именем XMLTask , которая позволяет выполнять простые замены с помощью XPath и поддерживает общую структуру файла. Есть ли какой-нибудь похожий и простой в использовании API в Java, Groovy, Jython или в друзьях, который позволяет это? Желательно Groovy, чтобы он хорошо интегрировался с Gradle.

Ответы [ 3 ]

2 голосов
/ 03 декабря 2011

Вы можете просто вставить xmltask в путь к классам и использовать AntBuilder от Groovy.Вот пример вот здесь я верю

1 голос
/ 04 декабря 2011

Я обнаружил, что DOMBuilder в groovy на самом деле сохраняет структуру, комментарии и ссылки на схемы как из входного файла:

import groovy.xml.DOMBuilder
import groovy.xml.XmlUtil
import static javax.xml.xpath.XPathConstants.*
import javax.xml.xpath.*

def doc = DOMBuilder.parse(new StringReader(new File("ejb-jar.xml").getText()), false, false).documentElement

use(groovy.xml.dom.DOMCategory) {
    nodes= doc.xpath( "//session/ejb-name[text()='EmployeeFacade']/../description", NODESET)
    println nodes.getLength()
    nodes.each{ 
        it.value = "TEST"
    }
}

def result = XmlUtil.serialize(doc)
println result

Не ожидал, что это сработает ...

0 голосов
/ 03 декабря 2011

В простой Java также есть сопоставители XPath http://www.ibm.com/developerworks/library/x-javaxpathapi/index.html

См. Пример Listing 7. XPath query that uses namespaces.Основная теория заключается в том, что вы пишете сопоставление и просматриваете результаты.

...