在我的xml文件中,我使用
从URL读取def inp = url.openStream(...)
def slurper = new XmlSlurper()
def xml = slurper.parse(inp).declareNamespace(xml:'http://www.w3.org/XML/1998/namespace')
我有
<course xmlns="http://www.kth.se/student/kurser" code="DD2471">
<title xmlns="" xml:lang="sv">Moderna databassystem</title>
<title xmlns="" xml:lang="en">Modern Database Systems</title>
我用groovy 1.8.6提取标题
def name = xml.title.find{ it.@':lang' == 'sv' }.text()
但是当升级到groovy 2.2.2时,我不再将瑞典标题变成一个空字符串,我无法弄清楚如何提取标题。 我想找到一个适用于所有groovy版本(或&gt; = 1.8.6)
的方法答案 0 :(得分:3)
适用于 2.2.2 和 2.3.4 - 2.2.2 ,因为那里访问xml
NS时<{3}}。
xml.title.find{ it.'@xml:lang'=='sv' }.text()
':lang'
(没有NS前缀)表示(在较新的groovy版本中) no namespace 。
请参阅bug
- 姓名或&#34; *:姓名&#34;匹配一个名为&#34; name&#34;的元素。不论其所在的命名空间(即这是默认的操作模式)
- &#34;:名称&#34;匹配一个名为&#34; name&#34;的元素。只有id元素不在命名空间中
- &#34;前缀:名称&#34;匹配元素名称&#34; name&#34;只有当它位于由前缀&#34;前缀&#34;标识的命名空间中时(以及命名空间映射的前缀由之前对declareNamespace的调用定义)
答案 1 :(得分:0)
问题是我遇到了我在我的应用程序中使用的groovy版本(2.2.2。)中的一个错误,唯一合理的结论是升级到错误更正的版本。 因此,解决方案是升级到最新的groovy(2.3.6)和grails(2.4.3)
另一种解决方案是使用XmlParser而不是XmlSlurper,这是我目前使用的。
我还必须从JDBC3升级到JDBC4。
最后,当公司从Ubuntu 12.04迁移到Ubuntu 14.04时,我将升级到Postgresql 9.3.5
所有这些升级都已计划最终发生,但是常规错误迫使我们加快步伐,我们采取了更长的步骤,跳过som中间版本。