使用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和本地名称