gpt4 book ai didi

grails - 使用XmlSlurper/GPathResult进行重大更改Grails 2.2.0-> Grails 2.3.5并选择具有未知 namespace 的attirbutes

转载 作者:行者123 更新时间:2023-12-02 14:42:25 26 4
gpt4 key购买 nike

给定以下XML:

<Response xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<Exception>
<Code>01</Code>
<Message i:nil="true" />
</Exception>
<Details />
</Response>

在grails 2.2.0中,我有类似以下的代码,该代码使我可以查询/ Response / Exception / Message / @ i:nil属性的值,而无需知道该属性的 namespace 'i':
def xml = new XmlSlurper().parse(<xml text>)
assert xml.Exception.Message.@nil.text() == 'true'

但是,升级到grails 2.3.5之后, xml.Exception.Message.@nil.text()现在返回一个空字符串。

我会注意到,在属性选择器中使用像 @i:nil这样的 namespace 确实可以工作,但是我的基本问题是我正在处理一个API,该API无法确定其使用的 namespace 前缀还是它根本不使用一个 namespace 。

我尝试构造 XmlSlurper,以便它像 new XmlSlurper(false,false)一样是 namespace 未知的,但是这样做我无法以任何方式选择属性( @nil@i:nil都不起作用)。

有谁知道我该如何解决这一重大变化?

最佳答案

这样,它将可以使用XmlSlurperXmlParser进行工作。

def xmlSlurp = new XmlSlurper( false, false ).parse( xml )

assert xmlSlurp.'**'.find {it.name() == 'Message'}?.attributes()?.findResult{k,v ->
k.endsWith( 'nil' ) ? v : null
} == 'true'

您还可以对 XmlSlurper使用no-arg构造函数。

更新:
一种更清洁的方法是
xmlSlurp.Exception.Message[0].attributes().find { it.key.endsWith( 'nil' ) }?.value

如果我们知道 Message将始终存在

关于grails - 使用XmlSlurper/GPathResult进行重大更改Grails 2.2.0-> Grails 2.3.5并选择具有未知 namespace 的attirbutes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27726017/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com