我试图遍历一个XML文件,并打印出上下文。然而,它似乎并不像我可以解析的父元素的车身,采用迭代的这种方式来寻找子元素:在groovy中迭代XML文件的正确方法是什么?
new XmlSlurper().parseText(getServiceConfigXml())
.'**'
.findAll { it.name() == 'project' }
.each { project ->
println "Project: ${project.attributes()}"
new XmlSlurper().parseText("${project.text()}")
.'**'
.findAll { it.name() == 'service' }
.each { service ->
println "\tService: ${service.attributes()}"
new XmlSlurper().parseText("${service.text()}")
.'**'
.findAll { it.name() == 'endpoint' }
.each { endpoint ->
println "\t\tEndpoint: ${endpoint.attributes()} - ${endpoint.text()}"
}
}
}
跑时,我得到这个堆栈
项目: [名称:普通]
[致命错误]:1:1:内容在prolog中是不允许的。
捕获:org.xml.sax.SAXParseException; lineNumber:1; columnNumber:1;序言中不能有内容。
org.xml.sax.SAXParseException; lineNumber:1; columnNumber:1;序言中不能有内容。 at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1239) at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl $ JAXPSAXParser.parse(SAXParserImpl。的java:643) 在xmltest2 $ _run_closure2.doCall(xmltest2.groovy:35) 在xmltest2.run(xmltest2.groovy:29) 在com.intellij.rt.execution.application.AppMain.main(AppMain.java: 147)
过程,退出代码完成1
所以好像我不能解析 “$ {project.text()}” 到第二的XmlSlurper。 (注意第一个println正确执行)
那么,我想要做什么的正确方法是什么?
编辑:这是我要遍历XML文件的一个小例子:
<project name='Common'>
<service name='name' pattern='something' isReliable='maybe'>
<receiver name='name' isUsingTwoWaySsl='maybe' isWsRmDisabled='maybe' targetedByTransformation='maybe'>
<endpoint name='local_tst01'>URL</endpoint>
<endpoint name='local_tst02'>URL</endpoint>
<endpoint name='local_tst03'>URL</endpoint>
<environment name='dev' default='local_dev' />
<environment name='tst01' default='test' />
<environment name='tst02' default='local_tst02' />
</receiver>
<operation name='name'>
<sender>sender</sender>
<attribute name='operation' type='String'>name</attribute>
</operation>
</service>
</project>