首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在根元素中未指定名称空间时,解析Groovy中的命名空间?

在根元素中未指定名称空间时,解析Groovy中的命名空间?
EN

Stack Overflow用户
提问于 2013-10-04 20:01:49
回答 1查看 4.6K关注 0票数 1

我正在编写一个Groovy脚本来解析来自web服务的SOAP响应,并且XML在文档中间指定了一个名称空间:

代码语言:javascript
复制
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" 
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
               xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <soap:Body>
      <AuthenticateResponse xmlns="KaseyaWS">
         <AuthenticateResult>
            <SessionID>xxxxxxxxxx</SessionID>
            <Method>Authenticate</Method>
            <TransactionID>4228</TransactionID>
            <ErrorMessage/>
            <ErrorLocation/>
         </AuthenticateResult>
      </AuthenticateResponse>
   </soap:Body>
</soap:Envelope>

名称空间没有指定名称,它只适用于<AuthenticateResponse xmlns="KaseyaWS">节点中的所有内容,但我仍然希望能够解析它。

GPathResult方法返回的parseText()允许您调用declareNameSpace(Map m)向文档添加命名空间,如下所示:

代码语言:javascript
复制
def slurper = XmlSlurper().parseText(someXMLText).declareNamespace(soap:'http://schemas.xmlsoap.org/soap/envelope/')

但是,我不明白如何在declareNamespace()上调用GPathResult来指定匿名命名空间(xmlns="KaseyaWS")。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-05 22:18:26

XmlSlurper可能不知道名称空间。因此,您可以在不担心名称空间的情况下进行解析,如:

代码语言:javascript
复制
def slurper = new XmlSlurper().parseText(someXMLText)
def result = slurper.Body.AuthenticateResponse.AuthenticateResult

assert result.SessionID == 'xxxxxxxxxx' 
assert result.Method == 'Authenticate' 
assert result.TransactionID == '4228' 

如果需要更多地控制名称空间和将xml解析为Node的方式,则可以使用XmlParser

代码语言:javascript
复制
def soapNs = new groovy.xml.Namespace(
                    "http://schemas.xmlsoap.org/soap/envelope/", 'soap')
def ns = new groovy.xml.Namespace("KaseyaWS", "test") //Dummy NS Prefix
def parser = new XmlParser().parseText(someXMLText)

assert parser[soapNs.Body][ns.AuthenticateResponse]
                  .AuthenticateResult.SessionID.text() == 'xxxxxxxxxx'
assert parser[soapNs.Body][ns.AuthenticateResponse]
                  .AuthenticateResult.Method.text() == 'Authenticate'
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19189789

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档