教程XML Parser Groovy命名空间处理

时间:2011-08-19 09:04:14

标签: xml parsing groovy namespaces

我发现了XmlParser()。parseText(...)的这个supergroovy函数。

没有命名空间对我来说很好...现在我有以下XML(SoapRequest):

<?xml version="1.0" encoding="UTF-8"?>
   <soap:Envelope xmlns:soap="http://xxx" xmlns:xsd="http://xxy" 
     xmlns:xsi="http://xxz">
       <soap:Body>
         <MG_Input xmlns="http://yxx">
            <Accnr>001</Accnr> 
            [...]

我的目标是通过XmlParser获取Accnr。 我认为它可以这样工作:

input = new File('c:/temp/03102890.xml-out')

def soapns = new groovy.xml.Namespace("http://xxx",'soap')
def xsdns = new groovy.xml.Namespace("http://xxy")
def xsins = new groovy.xml.Namespace("http://xxz")
def ordns = new groovy.xml.Namespace("http://yxx")



xml = new XmlParser().parseText(input.getText())
println xml[soapns.Envelope][soapns.Body][ordns.MG_Input][Accnr][0].text()

但这并没有真正起作用......

有人知道如何处理这个'简单'吗?我只是不能使用谷歌的例子......

2 个答案:

答案 0 :(得分:8)

您的表达式不正确 - xml var已经是xml文档的根元素(在本例中为soap:Envelope) - 所以您只需要从那里遍历。所以,你要找的表达是:

println xml[soapns.Body][ordns.MG_Input].Accnr[0].text()

答案 1 :(得分:1)

其他人的提示:

你可以打印你解析的String。例如,在此行xml = new XmlParser().parseText(input.getText())之后的print xml之上,那么你将获得top元素,它看起来类似于JSON数组,然后你可以轻松遍历它。不要包括你看到的最顶层元素。