Руководство пользователя Semantic MDM
×
Меню
Индекс

Методы для работы с 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+')';