首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >真正删除XMLParser对象Groovy中的节点

真正删除XMLParser对象Groovy中的节点
EN

Stack Overflow用户
提问于 2011-08-26 06:59:49
回答 2查看 18.1K关注 0票数 3

如何通过XMLParser真正删除节点:

代码语言:javascript
复制
 x='''<X>
<A>
 <B c3='1'>
   <C1>a</C1>
   <C2>b</C2>
 </B>
 <B c3='2'>
   <C1>e</C1>
   <C2>e</C2>
 </B>
 <B c3='3'>
   <C1>f</C1>
   <C2>f</C2>
 </B>
</A>
</X>
'''

xml=new XmlParser().parseText(x)
def nodeToDel=xml.A.B.find{it.@C1='a'}
xml.remove(nodeToDel)
println xml
new XmlNodePrinter(new PrintWriter(new FileWriter(new File('c:/temp/a.xml')))).print(xml)

似乎很管用,但是!当我将其转换为我的问题时,它仍然保存了运行remove-method后返回true的原始xml文件。

我在谷歌上搜索了一下,找到了这个错误。就像我现在受到的影响一样。我该怎么解决呢?有什么解决办法吗,还是我必须回到原来的地方,开始抄袭它的行文?groovy在这里真的很不错吗:-/

编辑:如下所述,并从中获得经验,不可能以这种方式删除等于e的标记。只有第一个记录将被删除。我认为xml格式存在问题。没有所需的格式:

<A x='1' y='2'></A>

而且它的格式

<A> <x>1</x> <y>2</y> </A>

有人能复制这种虫子吗?

edit2:我使用的是GroovyConsole 1.8.0。将c3属性添加到示例中。试图用同样的方法删除它,同样的错误:第一个B节被删除了.现在,最令人印象深刻的bug:尝试与其他代码:

代码语言:javascript
复制
def xml=new XmlParser().parseText(x)
xml.A.remove(xml.A.B.find{it.@'c3'= '3'}) //want to remove third section
new XmlNodePrinter(new PrintWriter(new FileWriter(new File('c:/temp/a.xml')))).print(xml)

结果,第一节属性c3更改为3?wtf..。

我想找一个星期的解决办法,真是累人.

有人有主意吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-08-26 15:13:17

删除节点与其他DOM非常相似。必须将要删除的节点传递给其父节点的remove方法。

=操作符也是Groovy中的赋值操作符。it.@C1 = 'a''a'分配给文档中每个B节点的C1属性。由于这个赋值的结果是'a',这是Groovy强迫true的,所以find总是返回它遇到的第一个节点。

代码语言:javascript
复制
xml=new XmlParser().parseText(x)
def nodeToDel=xml.A.B.C1.find { it.text() == 'a' }
def parent = nodeToDel.parent()
parent.remove(nodeToDel)
票数 14
EN

Stack Overflow用户

发布于 2020-01-24 18:32:09

改进Justin 的解决方案,并给出一个完整的示例:

代码语言:javascript
复制
def xml = new XmlParser().parseText('''
    <root>
        <element id="10" />
        <element id="20" />
    </root>
''')
def nodeToDel = xml.find { it["@id"] == '20' }

if (nodeToDel) {
    nodeToDel.parent().remove(nodeToDel)
}

println xml
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7201111

复制
相关文章

相似问题

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