Добавление объявления пространства имен в существующий XML с помощью Groovy + Smooks - PullRequest
0 голосов
/ 23 февраля 2011

Я пишу этот отличный скрипт, который запускается внутри Smooks и редактирует XML. Я пытаюсь добавить xsi: nil = "true" в пустые поля, и у меня проблема в том, что объявление пространства имен xsi не добавлено в корневое поле. Вот что я попробовал:

element['@xsi:nil'] = 'true'

и

def nil = doc.createAttributeNS("http://www.w3.org/2001/XMLSchema-instance", 'xsi:nil')
nil.setValue('true');
element.setAttributeNodeNS(nil)

Оба они добавят атрибут, но не объявление NS.

Я тоже пробовал это, но это приводит к ошибке переполнения стека:

def doc = element.getOwnerDocument();
doc.declareNamespace(xsi: 'http://www.example.org/xsi')

Вот ссылка на документацию Smooks: http://www.smooks.org/mediawiki/index.php?title=V1.4:groovy

По сути, скрипт выполняется внутри классного класса, который генерируется во время выполнения.

1 Ответ

2 голосов
/ 19 декабря 2011

попробуйте отформатировать элемент, как показано ниже:

 "elementname"('xsi:nil' : 'true', 'xmlns:xsi' : 'http://www.w3.org/2001/XMLSchema-instance')

это вернет следующий тег XML:

<elementname xsi:nil='true' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' />

Надеюсь, это решит вашу проблему.

...