Groovy Скрипт -

Моля, помогнете:: как мога да се справя с всеки един от тези в един или за всеки или нещо подобно? Имам .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}"
}

за да отпечатате всеки един от тях поотделно, като "пристанище" и "протокол" и такива, за всяко копие на .xml блок "Connector"? Благодаря.

Отговори:

0 за отговор № 1

като този?

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

0 за отговор № 2

Аз ще добавя име на атрибут, извличане на стойност на предишния отговор. Следното:

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

ако не се нуждаете от показателите в горния отговор.