如果我有一个下面形状的XML文件,并想用Groovy中的Regex解析它,我如何以一种非常简单的方式做到这一点,并从中创建一个新文件?我想使用regex而不是操纵DOM是有原因的。我需要注释到新文件。
我也不想指定要在XML文件中删除哪些元素,它可能是可以添加的多个我不知道的元素。所以它应该是:删除除根元素和任务元素及其子元素和注释之外的所有内容。
初始文件:
<root attribute1="attribute">
<tests>
<test>Test 1</test>
<test>Test 2</test>
</tests>
<tasks>
<!--
<task name="task one" >
Some task that is commented
</task>
-->
<task name="task one" >
Some text
</task>
</tasks>
</root>
新文件:
<root attribute1="attribute">
<tasks>
<!--
<task name="task one" >
Some task that is commented
</task>
-->
<task name="task one" >
Some text
</task>
</tasks>
</root>
这是我对Gradle函数的理解:
def extractXml() {
def input = new File("initial_file.xml")
if (input.exists()) {
def doc = DOMBuilder.parse(new StringReader(input.text))
def rootElement = doc.documentElement
use(DOMCategory) {
String xmlEventContent = rootElement as String
new File("new_file.xml").write(xmlEventContent)
}
}
}
也许这更接近你想要的?
def extractXml() {
def input = new File("initial_file.xml")
if (input.exists()) {
def doc = DOMBuilder.parse(new StringReader(input.text)).documentElement
use(DOMCategory) {
doc.each {
if (it.nodeName != 'tasks' && it.nodeName != '#text') {
doc.removeChild(it)
}
}
String xmlEventContent = doc as String
new File("new_file.xml").write(xmlEventContent)
}
}
}
避免使用正则表达式😉