Как прочитать имена атрибутов в колонках (например, модель: имя) при разборе XML с использованием XmlSlurper

У меня есть XMl, где атрибут, например, модель: имя.

После обновления до Grails 2 он не может извлечь атрибут, используя

. Это @"модель: имя".text()

Я прочитал, как читать дефисированные имена атрибутов (например, имя_модели) при синтаксическом анализе xml с использованием XmlSlurper и следовал по ссылкам тоже, но ничто не указывает мне на документацию о том, как обрабатывать атрибуты в колонке.

Окончательное решение для атрибутов xml:lang: it.attributes () ['{ http://www.w3.org/XML/1998/namespace} lang']

1 ответ

Решение

То, что вы называете "атрибутом в колонке", на самом деле является атрибутом, который находится в пространстве имен. Поведение по умолчанию XmlSlurper - игнорировать пространства имен в том смысле, что когда вы запрашиваете у него имя узла без двоеточия, он найдет узлы с этим локальным именем независимо от пространства имен. Таким образом, вы можете найти это просто

it.@name

находит интересующий вас атрибут. Если это не сработает, вам нужно позвонить declareNamespace для объекта, который вы вернули из XmlSlurper, для сопоставления префикса с URI пространства имен, который соответствует model: в документе XML (ищите xmlns:model="http://example.com" или что угодно в XML)

def xml = new XmlSlurper().parse(...).declareNamespace(
    model:"http://example.com")

а потом model:name должно сработать.

Другие вопросы по тегам