简体   繁体   English

Groovy 用于解析 XML 值的脚本

[英]Groovy Script to Parse XML values

Question问题

I need a groovy script to parse these ticket names and save them in user attributes我需要一个 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>

Current Code当前代码

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

Solution解决方案

The following solution will add a new attribute user with the same value as name以下解决方案将添加一个与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)
println xml.Ticket['@name'].eachWithIndex { name, index ->
    xml.Ticket[index].@user = name
}


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

println updatedXml

If you want to pull the XML to a file then write to the file you can modify the script accordingly如果要将 XML 拉到文件中,然后写入文件,您可以相应地修改脚本

import groovy.xml.StreamingMarkupBuilder

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

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

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

This will produce the following file这将产生以下文件

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

Caution : It may remove the XML prolog注意:它可能会删除 XML prolog

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM