У меня есть документ XML, содержащий атрибуты с квалифицированными именами. Я хочу получить значение атрибута с помощью XmlSlurper, но попытка доступа к атрибуту без указания пространства имен не работает (ниже приведен минимальный пример).Groovy XmlSlurper: получить значение атрибута, имеющего связанное пространство имен
def rootNode = new XmlSlurper().parseText(
'''<root xmlns:ex="http://example.com">
<one ex:a1="uno!"/>
<ex:two>Some text!</ex:two>
</root>''')
assert rootNode.one[0][email protected]() == 'uno!'
rootNode.one[0][email protected]()
даст пустую строку. Если вы используете rootNode.one[0].'@ex:a1'.text()
, мы получаем правильное значение, но это зависит от префикса пространства имен, используемого в документе, - и на него нельзя полагаться одинаковым для других документов, что важно для соответствующего пространства имен.
Так что вопрос: Как XmlSlurper можно использовать для доступа к значению атрибута атрибута, который имеет связанные с ним пространство имен без необходимости указывать префикс пространства имен? (было бы нормально, если бы потребовалось полное пространство имен)
Я согласен, что доступ к атрибутам без пространства имен может привести к беспорядочным ситуациям, но sometim es удобно использовать пространство имен независимо. С XmlSlurper неожиданно, что он ведет себя так по-разному для элементов и атрибутов - 'slurped.two [0]' даст элемент с соответствующим пространством имен, в то время как он не делает то же самое для атрибутов. – stempler
Я согласен с вами в этом ... Это немного вводит в заблуждение, что XmlSlurper ведет себя по-разному для элементов и атрибутов. Кроме того, вы можете создать XmlSlurper с «namespaceAware = false», но в этом случае ключ карты атрибутов «ex: a1» вместо '{http://example.com} a1'. – jalopaba