Методы для работы с XML и JSON форматом
В сценариях обогащения, могут встречаться задачи по получению данных в формате XML или JSON в произвольной структуре. Для работы с XML и JSON форматами, в Groovy-скрипт добавлена поддержка следующих библиотек:
Для работы с ними в Groovy-скрипт, требуется в первой строке скрипта выполнить импорт (import) соответствующей библиотеки.
Пример чтения данных из XML:
import groovy.xml.XmlSlurper
String getSampleDSEFullName() {
StringBuilder XMLText = new StringBuilder();
//Сформируем пример XML с описанием объекта ДСЕ из внешней системы
XMLText.append('<ExternalObject>')
.append('<FullName>Штуцер 123.01.01.40</FullName>')
.append('<Attributes>')
.append('<Attribute name="Наименование">Штуцер</Attribute>')
.append('<Attribute name="Обозначение">123.01.01.40</Attribute>')
.append('<Attribute name="Базовая ЕИ"><Object><Attributes><Attribute name="Обозначение ЕИ">шт.</Attribute></Attributes></Object></Attribute>')
.append('</Attributes>')
.append('</ExternalObject>');
//Выполним парсинг XML
def rootNode = new XmlSlurper().parseText(XMLText.toString());
//Извлечем значения атрибутов из присланного в XML объекта
String FullName = rootNode.'FullName'.text();
String DSECode = rootNode.'Attributes'.'*'.find {attribute -> attribute.'@name'=="Обозначение"}.text();
String DSEName = rootNode.'Attributes'.'*'.find {attribute -> attribute.'@name'=="Наименование"}.text();
String EICode = rootNode.'Attributes'.'*'.find {attribute -> attribute.'@name'=="Базовая ЕИ"}.'Object'.'Attributes'.'Attribute'[0].text();
//Вернем наименование по формуле: "<Наименование> <Обозначение> (<Обозначение ЕИ>)"
return DSEName + ' '+DSECode + ' ('+EICode+')';
}
Пример чтения данных из JSON
import groovy.json.JsonSlurper
String getSampleDSEFullName () {
StringBuilder XMLText = new StringBuilder();
//Сформируем пример JSON с описанием объекта ДСЕ из внешней системы
XMLText.append('{')
.append(' "FullName": "Штуцер 123.01.01.40",')
.append(' "Attributes": [')
.append(' {')
.append(' "name": "Наименование",')
.append(' "value": "Штуцер"')
.append(' },')
.append(' {')
.append(' "name": "Обозначение",')
.append(' "value": "123.01.01.40"')
.append(' },')
.append(' {')
.append(' "name": "Базовая ЕИ",')
.append(' "Object": {')
.append(' "Attributes": [')
.append(' {')
.append(' "name": "Обозначение ЕИ",')
.append(' "value": "шт."')
.append(' }')
.append(' ]')
.append(' }')
.append(' }')
.append(' ]')
.append('}');
//Выполним парсинг JSON
def rootNode = new JsonSlurper().parseText(XMLText.toString());
//Извлечем значения атрибутов из присланного в JSON объекта
String FullName = rootNode.'FullName';
String DSECode = rootNode.'Attributes'.find {it.'name'=="Обозначение"}.'value';
String DSEName = rootNode.'Attributes'.find {it.'name'=="Наименование"}.'value';
String EICode = rootNode.'Attributes'.find {it.'name'=="Базовая ЕИ"}.'Object'.'Attributes'[0].'value';
//Вернем наименование по формуле: "<Наименование> <Обозначение> (<Обозначение ЕИ>)"
return DSEName + ' '+DSECode + ' ('+EICode+')';