如何在使用XmlSlurper解析xml时读取带连字符的属性名称(例如model_name)

时间:2011-10-12 07:31:21

标签: xml groovy xmlslurper

我正在尝试在Groovy中使用XmlSlurper解析XML时读取属性。当我尝试读取带连字符的属性model-number时,我得到了一个例外。

<router name="b" id="x" manufacturer-id="e" model-number="a"/>

3 个答案:

答案 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}")
}