当前位置: 首页 > 知识库问答 >
问题:

用于多个文件的Groovy脚本xml解析器

孔山
2023-03-14

嗨,我的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”)

谢谢

利昂

共有1个答案

陈允晨
2023-03-14

首先,我会建议你拿你所拥有的,并把它放入一个单一的功能;它是一个很好的编码实践,提高了可读性。

现在要在目录中的每个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")
}

如果您愿意,也可以从命令行添加目录中的读取。

 类似资料:
  • 我需要一个groovy脚本的代码示例,它可以访问存储在我的文件系统中任何地方的xml文件。在这个xml文件中,我有数据库凭据,我的脚本需要访问数据库。下面是xml 提前致谢:)

  • 问题内容: 我正在尝试将一个大型xml文件拆分为多个文件,并在AWK脚本中使用了以下代码。 上面的代码生成一个名称为“ fileItem_1”,“ fileItem_2”,“ fileItem3”等的xml文件列表。 但是,我希望文件名类似于“ item_XXXXX”,其中XXXXX是XML内的一个节点-如下图所示 因此,基本上我希望“ id”节点为文件名。谁能帮我这个忙吗? 问题答案: 我不会用

  • 要求:从文件夹中读取xml文件,并将文件内容传递给Soap请求。 问题我正在尝试使用groovy脚本读取保存在文件夹中的文件,但无法读取文件的内容。我在尝试打印xml文件的内容时遇到空指针异常。 根据评论更新,增加问题。 我的测试用例包含3个步骤。第1步:从文件夹中读取xml文件。第2步:使用xml文件内容作为肥皂请求输入。第3步:将输出文件夹中第2步的响应保存为xml。

  • 我使用groovy脚本中的方法创建了一个自定义dsl命令链。我从另一个groovy文件访问此命令链时遇到问题。是否有实现功能的方法? 我尝试过使用“evaluate”,它可以加载groovy文件,但无法执行命令链。我尝试过使用GroovyShell类,但无法调用这些方法。 我这里有一个小房间。groovy中执行“please show the cube\u root of 1000”会产生10的结

  • 问题内容: 我如何在Java或C中使用vtd-xml解析如下的xml文件? 任何帮助,将不胜感激。 谢谢 问题答案: 我想其中有些取决于您要如何解析文件。 这是一个“非生产”示例,其中使用了一些有用的技术,包括: XPath选择(此处仅使用“ / *”) 浏览所有同级节点 通过子节点向下看 使用AutoPilot将节点属性提取到地图中 希望能帮助到你 产生以下输出: 添加带有AutoPilot循环

  • 如何在java或C中使用vtd xml解析如下xml文件? 任何帮助都将不胜感激。 谢谢