如何使用 Gradle 和正则表达式解析 XML + 评论并保存到新文件
How to use Gradle and regex to parse XML + comments and save to a new file
如果我有一个下面形状的 XML 文件,并且想用 Groovy 中的正则表达式解析它,我该如何以非常简单的方式执行此操作并从中创建一个新文件?我想使用正则表达式而不是操纵 DOM 是有原因的。我需要评论才能转到新文件。
我也不想在 XML 文件中指定要删除的元素,可能会添加多个我不知道的元素。所以应该是:删除除根元素和 tasks 元素及其子元素和注释之外的所有元素。
初始文件:
<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)
}
}
}
任何避免使用正则表达式的东西
如果我有一个下面形状的 XML 文件,并且想用 Groovy 中的正则表达式解析它,我该如何以非常简单的方式执行此操作并从中创建一个新文件?我想使用正则表达式而不是操纵 DOM 是有原因的。我需要评论才能转到新文件。
我也不想在 XML 文件中指定要删除的元素,可能会添加多个我不知道的元素。所以应该是:删除除根元素和 tasks 元素及其子元素和注释之外的所有元素。
初始文件:
<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)
}
}
}
任何避免使用正则表达式的东西