【问题标题】:Groovy Script to Parse XML values解析 XML 值的 Groovy 脚本
【发布时间】:2021-12-31 22:04:38
【问题描述】:

问题

我需要一个 groovy 脚本来解析这些票证名称并将它们保存在用户属性中

<?xml version="1.0" encoding="utf-8"?>
<root>
  <FTP FTPName="ftp.com.samplecompany.net" Login="CertUser" Pass="Password"></FTP>
  <Ticket name="Accept">
  </Ticket>
  <Ticket name="Afp">    
  </Ticket>
  <Ticket name="Exe">    
  </Ticket>
</root>

当前代码

def tickets = job.getDocuments()[0].getText().split(""></Ticket><Ticket name="") 
def len = tickets.size()

【问题讨论】:

  • 请添加您尝试过的代码以及失败的原因(例如错误、堆栈跟踪、日志等),以便我们对其进行改进。
  • def ticket = job.getDocuments()[0].getText().split("">
  • edit 问题并在那里添加代码。注释对共享代码没有用处。还有什么是job 这里-很可能这个问题需要进一步标记。这是[詹金斯]?
  • 我根据@cfrick 的建议编辑了您的问题......授予与您的问题不符。我发布了一个应该根据您的要求的答案(您需要删除序言,如您将在我的示例中看到的那样)

标签: xml parsing groovy


【解决方案1】:

解决方案

以下解决方案将添加一个与 name

具有相同值的新属性 user
import groovy.xml.StreamingMarkupBuilder

def xmlStr = '''
<root>
  <FTP FTPName="ftp.com.samplecompany.net" Login="CertUser" Pass="Password"></FTP>
  <Ticket name="Accept">
  </Ticket>
  <Ticket name="Afp">    
  </Ticket>
  <Ticket name="Exe">    
  </Ticket>
</root>
'''

def xml = new XmlParser().parseText(xmlStr)
xml.Ticket['@name'].eachWithIndex { name, index ->
    xml.Ticket[index].@user = name
}


def outputBuilder = new StreamingMarkupBuilder()
def updatedXml = outputBuilder.bind{ mkp.yield xml }

println updatedXml

如果你想把 XML 拉到一个文件然后写入文件你可以相应地修改脚本

def xmlFile = 'file.xml'
def xml = new XmlParser().parse(xmlFile)

xml.Ticket['@name'].eachWithIndex { name, index ->
    xml.Ticket[index].@user = name
}

new XmlNodePrinter(new PrintWriter(new FileWriter(xmlFile))).print(xml)

这将产生以下文件

<root>
  <FTP FTPName="ftp.com.samplecompany.net" Login="CertUser" Pass="Password"/>
  <Ticket name="Accept" user="Accept"/>
  <Ticket name="Afp" user="Afp"/>
  <Ticket name="Exe" user="Exe"/>
</root>

注意:它可能会删除 XML prolog 和 cmets

【讨论】:

    猜你喜欢
    • 2017-06-10
    • 2013-02-21
    • 2023-04-05
    • 1970-01-01
    • 2016-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    相关资源
    最近更新 更多