9

我试图在 Groovy 中使用 XmlSlurper 解析 XML 时读取属性。当我尝试读取连字符属性model-number时,出现异常。

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

3 回答 3

11
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'

我在控制台上试过这个,它正在工作。

于 2011-10-12T08:44:41.550 回答
3

来自XMLSlurper 的 Groovy 文档

如果您的元素包含破折号等字符,您可以用双引号将元素名称括起来。

例子:

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()

测试并为我工作。

于 2011-10-12T08:41:25.187 回答
2

您还可以通过使用变量来处理连字符(和非连字符)属性,这有时仅在通用处理具有未知或不一致属性的 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}")
}
于 2014-02-24T14:21:56.963 回答