Разбор xml и извлечение специфического атрибута дочернего элемента в groovy - PullRequest
0 голосов
/ 27 мая 2019

У меня есть следующий XML-код в виде строки: (здесь используется Groovy Playground для быстрого выполнения: https://groovy -playground.appspot.com / )

#!groovy
import groovy.util.XmlParser
import groovy.json.JsonSlurper
import groovy.JCIFS.*
import groovy.SmbFile.*

string = """<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<machine osBit="x64" osVersion="5.6" platform="linux" ip="A.A.A.A" lastTimeIdentified="1553611375772" name="AGENT_NAME" xsi:schemaLocation="" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <ssh xsi:type="sshContext" password="root12" user="root"/>
    <interfaces>
        <interface alias="false" ipAddress="A.A.A.A" name="eth0"/>
    </interfaces>
    <bsx_msi teradataVersionImperva="NOT_TD" uekVersionImperva="NOT_UEK" uname_m="x86_64" uname_n="AGENT_NAME" uname_r="2.6.32-100.26.2.el5" uname_s="Linux" uname_v="#1 SMP Tue Jan 18 20:11:49 EST 2011"/>
    <services>
        <service dbHomePath="/opt/oracle/app/oracle/product/11.2.0/db" dbName="orcl" dbPassword="barbapapa" dbUser="system" dbVersion="11.2.0.1.0" isMariaDB="false" sshPassword="oracle" sshUser="oracle" enabled="true" serviceName="defaultService" **type="Oracle"**>
            <channels>
                <channel xsi:type="machineIdentifierChannelDbAlias" channelType="OracleBEQ" enabled="true">
                    <connections>
                        <connection xsi:type="localConnection" platform="linux" sshPassword="oracle" sshUser="oracle" channelType="OracleBEQ" connectionType="Local" dbName="orcl" dbPassword="barbapapa" dbUser="system" host="A.A.A.A" serviceType="Oracle"/>
                    </connections>
                </channel>
            </channels>
        </service>
    </services>
    <zoneConfiguration/>
</machine>
"""

И я хочу извлечь тип «оракул» из тега «сервис», который является атрибутом тега, всегда получая ошибку, вот код, который я пытаюсь запустить:

def xmlParser = new XmlParser().parseText(string)
agentPlatform = xmlParser.services.service.attribute("type")
println agentPlatform

Какая это правильная форма?

1 Ответ

1 голос
/ 27 мая 2019

Нашел ответ:

def xmlParser = new XmlParser().parseText(string)

results = xmlParser.services[0].service[0].@type
println results //Oracle
...