2016-03-07 2 views
0

Привет, мой отличный скрипт вырезает тэг xml из файла и записывает его в файл.Groovy script xml parser для нескольких файлов

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')

Благодаря

Leon

ответ

0

Во-первых, я бы порекомендовал вам взять то, что у вас есть и положить его в один функция; это хорошая практика кодирования и улучшает читабельность.

Теперь, чтобы выполнить функцию для каждого xml-файла в каталоге, вы можете использовать groovy's 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") 
} 

Если вы хотите, вы можете добавить чтение в каталоге из командной строки, а также.

+0

Большое спасибо Riley не может дождаться, чтобы попробовать новый код быстрого вопроса, если моя папка по умолчанию для xml-файлов говорила G: // incoming_files я бы изменил на новый файл («G: // incoming_files»)? – Leon

+0

Привет, Леон. Похоже, что он должен работать –

+0

, который работает благодаря тому, что теперь я пытаюсь изменить выходную папку выходных файлов на G: // Outgoing_Files вместо каталога по умолчанию есть способ изменить каталог в groovy? – Leon

Смежные вопросы