在Groovy中的元素名称中带有名称空间(冒号)的Xml

时间:2018-03-21 10:55:32

标签: xml groovy

我在元素中有一个带名称空间的XML(例如bpmn:definitions)。我需要在Groovy中解析它。我尝试使用XmlSlurper和XmlParser但我无法正确解析它。

目标是打印 bpmn:definitions-> bpmn:definitions-> @camunda:versionTag (在xpath / bpmn:definitions / bpmn:process [1] / @ camunda:versionTag)

我有以下脚本:

def xmlText = '<?xml version="1.0" encoding="UTF-8"?>' +
'<bpmn:definitions exporterVersion="1.10.0" xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:camunda="http://camunda.org/schema/1.0/bpmn">' +
     '<bpmn:process camunda:versionTag="0.2" id="fund-order" isClosed="false"     isExecutable="true"></bpmn:process>
</bpmn:definitions>'

def xml = new XmlSlurper(false, false).parseText(xmlText)
println "PROPERTY: ${xml.@'bpmn:definitions'.@'bpmn:process'.@'@camunda:versionTag'}"

我将不胜感激。

谢谢。

1 个答案:

答案 0 :(得分:2)

冒号前的名称称为&#34;名称空间&#34;

鉴于XML:

def xmlText = '''<?xml version="1.0" encoding="UTF-8"?>
<bpmn:definitions exporterVersion="1.10.0" xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:camunda="http://camunda.org/schema/1.0/bpmn">
  <bpmn:process camunda:versionTag="0.2" id="fund-order" isClosed="false" isExecutable="true"></bpmn:process>
</bpmn:definitions>'''

您不需要引用根节点(由XmlSlurper假设)

您不需要使用@(即属性)为节点名称添加前缀

@应位于最后一个属性

的字符串之外

所以这会给你:

def xml = new XmlSlurper(false, false).parseText(xmlText)
println "PROPERTY: ${xml.'bpmn:process'.@'camunda:versionTag'}"