Как прочитать имена атрибутов с дефисами (например, имя_модели) при разборе xml с использованием XmlSlurper - PullRequest
7 голосов
/ 12 октября 2011

Я пытаюсь прочитать атрибут при синтаксическом анализе XML с помощью XmlSlurper в Groovy.Когда я пытаюсь прочитать атрибут дефиса model-number, я получаю исключение.

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

Ответы [ 3 ]

10 голосов
/ 12 октября 2011
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'

Я попробовал это на консоли, и он работает.

3 голосов
/ 12 октября 2011

Из Groovy документации по 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()

Проверено и работает на меня.

1 голос
/ 24 февраля 2014

Вы также можете обрабатывать дефисированные (и не дефисные) атрибуты, используя переменные, что иногда полезно только при общей обработке XML с неизвестными или противоречивыми атрибутами (такими как, возможно, отправленные веб-формы).

Здесь вы можете увидеть пример, который перебирает все атрибуты в 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}")
}
...