当使用Groovy的XMLParser(和熟悉的API)来更改XML中的文本节点内容时,它会在解析文件时松散整体结构,从而在写回文件时。即空格改变,注释被删除,dtd-references被剥离。
存在一个名为XMLTask的ANT库,它允许在XPath的帮助下进行简单的替换,并维护文件的整体结构。在Java,Groovy,Jython或朋友中是否有一些类似且易于使用的API允许这样做? 最好是Groovy,因此它与Gradle很好地结合在一起。
答案 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
。
主要理论是你编写一个匹配器并循环遍历结果。