我正在尝试在Groovy中使用XmlSlurper解析XML时读取属性。当我尝试读取带连字符的属性model-number
时,我得到了一个例外。
<router name="b" id="x" manufacturer-id="e" model-number="a"/>
答案 0 :(得分:10)
def a = "<router name='b' id='x' manufacturer-id='e' model-number='a'/>"
def router = new XmlSlurper().parseText(a)
println router.@'manufacturer-id'
println router.@'name'
println router.@'id'
println router.@'model-number'
我在控制台上尝试了这个,它正在运行。
答案 1 :(得分:3)
来自Groovy documentation on XMLSlurper:
如果元素包含破折号等字符,则可以用双引号括起元素名称。
示例:
def myXML = '<router name="b" id="x" manufacturer-id="e" model-number="a"/>'
def router = new XmlSlurper().parseText(myXML)
def attr = router.@"model-number".text()
经过测试并为我工作过。
答案 2 :(得分:1)
您还可以使用变量来处理带连字符(和非带连字符)的属性,这有时仅用于具有未知或不一致属性的XML的通用处理(例如,可能是提交的Web表单)。
在这里,您可以看到循环遍历XML中所有属性的示例,无论它们是否具有超级广告:
def xml = "<router name='b' id='x' manufacturer-id='e' model-number='a'/>"
def router = new XmlSlurper().parseText(xml)
for (String attrib : router.attributes().keySet()) {
value = router.@"$attrib".text()
println("${attrib}=${value}")
}