2012-04-23 15 views
0

groovyでxmlファイルを読んでいますが、何が問題なのか分かりません。以下は GroovyでXmlファイルを読む

は私の関数である

def setEnvironment(Map env,Map params) 
{ 
    def records=new XmlSlurper().parse(env.get("ABC_HOME")+"/isp/config/nodemeta.xml") 


    def jdbcurl=records.'domainservice:DBConnectivity'[0][email protected] 
    params.put("dn", records.'domainservice:GatewayNodeConfig'[0][email protected]) 
    params.put("dh", records.'domainservice:GatewayNodeConfig'[0].'address'[0][email protected]) 
    params.put("dp", records.'domainservice:GatewayNodeConfig'[0].'address'[0][email protected]) 
    params.put("u", records.'domainservice:DBConnectivity'[0][email protected]) 
    if(jdbcurl==null||jdbcurl.size()==0) 
    { 
     params.put("tns", records.'domainservice:DBConnectivity'[0][email protected]) 
    } 
    else 
    { 
     params.put("tns", jdbcurl.find("(?<=%2F%2F)[\\d\\w_]+")) 
    } 

    println params 

} 

マイ出力

[pd:admin, u:, tns:, dh:, dn:, dp:, un:admin, x:c1164035531] 

私のXml

<?xml version="1.0" encoding="UTF-8"?> 
    <imx:IMX xmlns:imx="http://com.abc.imx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" serializationSpecVersion="4.0" crcEnabled="0" xmlns:domainservice="http://com.abc.isp.metadata.domainservice/2" versiondomainservice="2.4.1" xmlns:common="http://com.abc.isp.metadata.common/2" versioncommon="2.2.0" xsi:schemaLocation="http://com.abc.imx IMX.xsd http://com.abc.isp.metadata.domainservice/2 com.abc.isp.metadata.domainservice.xsd http://com.abc.isp.metadata.common/2 com.abc.isp.metadata.common.xsd"> 
<domainservice:GatewayNodeConfig imx:id="U:LtWHxY0ZEeGb2FwhP-xoGw" adminconsolePort="15533" adminconsoleShutdownPort="38207" domainName="D_1035531" nodeName="N_1035531" dbConnectivity="ID_1"> 
<address imx:id="ID_2" xsi:type="common:NodeAddress" host="absdie" httpPort="1531" port="1532"/> 
<portals> 
<NodeRef imx:id="ID_3" xsi:type="common:NodeRef" address="ID_2" nodeName="N_1035531"/> 
</portals> 
</domainservice:GatewayNodeConfig> 
<domainservice:DBConnectivity imx:id="ID_1" dbEncryptedPassword="ZmTXZDoYq0TyrU7fSaS9BrAlIuZyS2rw%2FafW1TLWE4g%3D" dbHost="fortuner" dbName="ORCL" dbPort="1521" dbType="ORACLE" dbUsername="zx1649355388"/> 
</imx:IMX> 

:PD & xがマップに既に存在している

あなたが...ただ、ノード名の名前空間の一部を取り除くために

答えて

1

XmlSlurperは、それが働いた

params.dn = records.GatewayNodeConfig[0][email protected]() 
params.dh = records.GatewayNodeConfig[0].address[0][email protected]() 
params.dp = records.GatewayNodeConfig[0].address[0][email protected]() 
params.u = records.DBConnectivity[0][email protected]() 
+0

感謝を(だけでなく、よりGroovyのマップ管理に注意してください)名前空間を処理していますか?また、 '(Groovyのマップ管理についても)'とはどういう意味ですか? – abi1964

+1

@AbhishekSimon Cool :-)私は 'params.put( 'dn'、XXX)'ではなく 'params.dn = XXX'を呼び出す方がより慣れ親しんでいることを意味しています –