有没有替代ANT的XMLTask来替换XML而不改变文件的结构?

时间:2011-12-03 14:05:42

标签: java groovy jython

当使用Groovy的XMLParser(和熟悉的API)来更改XML中的文本节点内容时,它会在解析文件时松散整体结构,从而在写回文件时。即空格改变,注释被删除,dtd-references被剥离。

存在一个名为XMLTask的ANT库,它允许在XPath的帮助下进行简单的替换,并维护文件的整体结构。在Java,Groovy,Jython或朋友中是否有一些类似且易于使用的API允许这样做? 最好是Groovy,因此它与Gradle很好地结合在一起。

3 个答案:

答案 0 :(得分:2)

你可以在类路径上粘贴xmltask,然后使用groovy的AntBuilder。有一个this here I believe

的例子

答案 1 :(得分:1)

我发现groovy中的DOMBuilder实际上保留了输入文件中的结构,注释和模式引用:

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

没想到要工作......

答案 2 :(得分:0)

普通java中也存在XPath匹配器http://www.ibm.com/developerworks/library/x-javaxpathapi/index.html

有关示例,请参阅Listing 7. XPath query that uses namespaces。 主要理论是你编写一个匹配器并循环遍历结果。