Groovy Script .xml解析

时间:2017-01-25 14:45:36

标签: groovy

请帮助:我如何在.each或For Each或其他什么方面处理这些问题?我有一个.xml我试图用Groovy脚本解析。这是.xml:

<Server port="8005" shutdown="SHUTDOWN">
  <Service name="Catalina">
    <Connector port="8080" URIEncoding="UTF-8" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"/>
    <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
         maxThreads="150" scheme="https" secure="true"
         keystoreFile="/something/q2_reports/server_QA1/keystorea.jks" keystorePass="password"
         clientAuth="false" sslProtocol="TLS" />
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443"/>
  </Service>
</Server>

这是我的Groovy脚本:

def Server1 = new XmlParser().parse('c:\\temp\\server.xml')
Server1.Service.Connector.each {
    println "Stuff in Connector: ${it}"
}

这是结果:

Stuff in Connector: Connector[attributes={port=8080, URIEncoding=UTF-8, protocol=HTTP/1.1, connectionTimeout=20000, redirectPort=8443}; value=[]]

Stuff in Connector: Connector[attributes={port=8443, protocol=HTTP/1.1, SSLEnabled=true, maxThreads=150, scheme=https, secure=true, keystoreFile=/cwtapp/e2_reports/jasper_server_QA1/keystore.jks, keystorePass=password, clientAuth=false, sslProtocol=TLS}; value=[]]

Stuff in Connector: Connector[attributes={port=8009, protocol=AJP/1.3, redirectPort=8443}; value=[]]

我的问题是:我可以在

的代码块中放入什么代码
Server1.Service.Connector.each {
    println "Stuff in Connector: ${it}"
}

为了逐个打印每个项目,比如'port'和'protocol'等,对于.xml块'Connector'的每个实例都是如此? 感谢。

2 个答案:

答案 0 :(得分:0)

像这样?

def Server1 = new XmlParser().parse('c:\\temp\\server.xml')
Server1.Service.Connector.each {
    println 'Attributes of Connector:'
    it.attributes().each { println it }
    println()
}

答案 1 :(得分:0)

我会将属性名称,值提取添加到上一个答案中。以下内容:

def str = '''\
<Server port="8005" shutdown="SHUTDOWN">
  <Service name="Catalina">
    <Connector port="8080" URIEncoding="UTF-8" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"/>
    <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
         maxThreads="150" scheme="https" secure="true"
         keystoreFile="/something/q2_reports/server_QA1/keystorea.jks" keystorePass="password"
         clientAuth="false" sslProtocol="TLS" />
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443"/>
  </Service>
</Server>'''

def xml = new XmlParser().parseText(str)
xml.Service.Connector.indexed(1).each { i, connectorNode -> 
  println "\nConnector $i"
  connectorNode.attributes().each { k, v -> 
    println "$k -> $v"
  }
}

打印:

Connector 1
port -> 8080
URIEncoding -> UTF-8
protocol -> HTTP/1.1
connectionTimeout -> 20000
redirectPort -> 8443

Connector 2
port -> 8443
protocol -> HTTP/1.1
SSLEnabled -> true
maxThreads -> 150
scheme -> https
secure -> true
keystoreFile -> /something/q2_reports/server_QA1/keystorea.jks
keystorePass -> password
clientAuth -> false
sslProtocol -> TLS

Connector 3
port -> 8009
protocol -> AJP/1.3
redirectPort -> 8443

你可以写:

xml.Service.Connector.each { connectorNode ->

如果您不需要上述答案中的索引。