我在元素中有一个带名称空间的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'}"
我将不胜感激。
谢谢。
答案 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'}"