使用groovy删除具有命名空间的特定xml节点

使用groovy删除具有命名空间的特定xml节点,xml,groovy,xml.modify,Xml,Groovy,Xml.modify,尝试使用groovy删除xml节点。这里要删除requiredByDate元素,该元素多次出现,并且具有带前缀的namcespace 查看了网络上的许多示例,以及stackover。其中一些很接近。如果该xml元素没有名称空间,则获取所需的输出 问题在于xml元素具有命名空间,无法实现预期的输出 下面是我正在尝试的groovy脚本: 导入groovy.xml* def x='' ${#TestCase#ORDERREF} 用户测试 2010-02-02T12:00:00-07:00 1. 模式1

尝试使用
groovy
删除xml节点。这里要删除
requiredByDate
元素,该元素多次出现,并且具有带前缀的namcespace

查看了网络上的许多示例,以及stackover。其中一些很接近。如果该xml元素没有名称空间,则获取所需的输出


问题在于xml元素具有命名空间,无法实现预期的输出

下面是我正在尝试的groovy脚本:

导入groovy.xml* def x='' ${#TestCase#ORDERREF} 用户测试 2010-02-02T12:00:00-07:00 1. 模式1 2010-02-02T12:00:00-07:00 2. 用户操作 2010-02-02T12:00:00-07:00 ''' def xml=new XmlParser().parseText(x) def nodes=xml.'**'.findAll{it.name() nodes.each{it.parent().remove(it)} serialize(xml).toString() 输出与输入相同,即不删除
requiredbyday
元素(在xml中出现3次)

如果我使用名称空间硬编码,例如,
'ord1:requiredByDate'
,则会出现所需的输出。此处引用
xml.'**'.findAll{it.name()=='ord1:requiredByDate'}


但是,我不知道在运行时xml中会出现什么前缀。因此,不能在上面的
findAll
中使用硬编码前缀。

具有命名空间的节点为其
name()
方法返回
QName
。您可以使用方法
QName.getLocalPart()

试试这个:

def nodes = xml.'**'.findAll{ it.name().localPart == 'requiredByDate' }

或javadoc用于:

通常,名称是字符串,值是字符串或字符串 其他节点的列表,尽管这些类型可以扩展以提供 灵活的结构,例如您可以使用QName作为 包括命名空间URI和本地名称