我的groovy脚本从文件中删除了一个xml标记并写入文件。
import org.apache.commons.lang.RandomStringUtils
import groovy.util.XmlSlurper
inputFile = 'C:\\sample.xml'
outputFile = 'C:\\ouput.txt'
XMLTag='Details'
fileContents = new File(inputFile).getText('UTF-8')
def xmlFile=new XmlSlurper().parseText(fileContents)
def myPayload= new String(xmlFile.'**'.find{node-> node.name() == XMLTag} *.text().toString())
file = new File(outputFile)
w = file.newWriter()
w << myPayload.substring(1, myPayload.length()-1)
w.close()
我的问题是如何编写它以使其遍历整个目录并在多个xml文件上执行它并在硬编码时创建多个输出。 ('C:\ sample.xml'和'C:\ ouput.txt')
由于
莱昂
答案 0 :(得分:0)
首先,我建议你把你拥有的东西放到一个单独的功能中;它是一个很好的编码实践,提高了可读性。
现在要在目录中的每个xml文件上执行该函数,您可以使用groovy的File.eachFileMatch()。例如,如果要在当前目录中的每个xml文件上运行它,可以执行以下操作:
import org.apache.commons.lang.RandomStringUtils
import groovy.util.XmlSlurper
import static groovy.io.FileType.*
void stripTag(File inputFile, String outputFile) {
def XMLTag='Details'
fileContents = inputFile.getText('UTF-8')
def xmlFile=new XmlSlurper().parseText(fileContents)
def myPayload= new String(xmlFile.'**'.find{node-> node.name() == XMLTag}*.text().toString())
def file = new File(outputFile)
w = file.newWriter()
w << myPayload.substring(1, myPayload.length()-1)
w.close()
}
// This will match all files in the current directory with the file extension .xml
new File(".").eachFileMatch(FILES, ~/.*\.xml/) { File input ->
// Set the output file name to be <file_name>_out.txt
// Change this as you need
stripTag(input, input.name + "_out.txt")
}
如果您愿意,也可以从命令行添加目录中的读数。