当使用Groovy的XMLParser (和smiliar API)更改XML中的文本节点的内容时,它在解析文件时会丢失整体结构,因此在写回文件时也会丢失整体结构。例如,空格改变,注释被删除,dtd引用被剥离。
有一个名为XMLTask的ANT库,它允许在XPath的帮助下进行简单的替换,并维护文件的整体结构。在Java、Groovy、Jython或其朋友中是否有类似且易于使用的API允许这样做?最好是Groovy,因此它可以很好地与Gradle集成。
发布于 2011-12-04 03:54:55
您可以将xmltask放在类路径中,并使用groovy的AntBuilder。这里有一个this here I believe的例子
发布于 2011-12-04 20:43:07
我发现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没想到这会成功。
发布于 2011-12-03 22:41:21
在纯java http://www.ibm.com/developerworks/library/x-javaxpathapi/index.html中也有XPath匹配器。
有关示例,请参阅Listing 7. XPath query that uses namespaces。主要的理论是你写一个匹配器并循环结果。
https://stackoverflow.com/questions/8368195
复制相似问题