2011-12-12 76 views
1

我有一个简短的XML我希望得到一些attribs出来,但我得到了一些错误解析属性使用Groovy的XmlParser的

错误

Exception in thread "main" groovy.lang.MissingMethodException: No signature of method: groovy.util.NodeList.attribute() is applicable for argument types: (java.lang.String) values: [dbHost] 

我的代码

def temp=""" 
<nodemetadata> 
    <imx:IMX xmlns:imx="http://com.abc.imx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:domainservice="http://com.abc.isp.metadata.domainservice/2"> 
    <domainservice:GatewayNodeConfig imx:id="U:pgwraGgJbC99YpLSQ" consolePort="13993" consoleShutdownPort="4613" domainName="D_1163931" nodeName="N_1163931" dbConnectivity="ID_1"> 
    <address imx:id="ID_2" xsi:type="common:NodeAddress" host="beetle" httpPort="1391" port="1392"/> 
    <portals> 
    <NodeRef imx:id="ID_3" xsi:type="common:NodeRef" address="ID_2" nodeName="N_1163931"/> 
    </portals> 
    </domainservice:GatewayNodeConfig> 
    <domainservice:DBConnectivity imx:id="ID_1" dbEncryptedPassword="AfaFnEtrQkOKFTVBYIIQ%3D%3D" dbHost="forer" dbName="ORCL" dbPort="1521" dbType="ORACLE" dbUsername="mka"/> 
    </imx:IMX> 
</nodemetadata> 
""" 

def records = new XmlParser().parseText(temp) 
def dbHost='dbHost' 
println "Host = "+records.'imx:IMX'.'domainservice:DBConnectivity'.attribute("dbHost") 

什么会出错?

回答

2

不能使用:

def attrname = 'dbHost' 
println "Host = "+records.'imx:IMX'.'domainservice:DBConnectivity'[email protected]"$attrname" 

的问题是,你有一个NodeList,不是Node,所以得到attribute方法工作,你需要做两种:

// Call attribute on the first Node element 
println "Host = "+records.'imx:IMX'.'domainservice:DBConnectivity'[0].attribute(attrname) 

或者

// Call attribute on each Node in the NodeList, and return a list of attributes 
println "Host = "+records.'imx:IMX'.'domainservice:DBConnectivity'*.attribute(attrname) 
+0

哦谢谢..得到它 – abi1964

+1

@AbhishekSimonü我的回答更好地解释了你的例子中发生了什么问题 –

+0

雅即使我记得你的初始解决方案后,所以我试着'println“Host =”+ records.'imx:IMX'。'domainservice:DBConnectivity'[0]。 @ dbHost',它工作。再次感谢! :) – abi1964