我正在尝试遍历 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()}"
}
}
}
Run Code Online (Sandbox Code Playgroud)
运行时,我得到这个堆栈
项目:[名称:普通]
[致命错误] :1:1: 序言中不允许出现内容。
捕获:org.xml.sax.SAXParseException;行号:1;列数:1;序言中不能有内容。
org.xml.sax.SAXParseException; 行号:1;列数:1;序言中不能有内容。在 com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1239) 在 com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:第643章
进程已完成,退出代码为 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>
Run Code Online (Sandbox Code Playgroud)
您可以这样做,而不是一次又一次地尝试重新解析 XML...
def root = new XmlSlurper().parseText(xml)
println "Project attributes: ${root.attributes()}"
root.service.each { service ->
println "\tService attributes: ${service.attributes()}"
service.receiver.endpoint.each { endpoint ->
println "\t\tEndpoint: ${endpoint.attributes()} - ${endpoint.text()}"
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2342 次 |
| 最近记录: |