AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 21.12.2020, 23:18   #1  
rootx is offline
rootx
Участник
 
28 / 18 (1) ++
Регистрация: 17.02.2008
Импорт в Аксапту файла XML электронных лисов нетрудоспособности
Здравствуйте! Все вроде было хорошо, и новый год близко.
Но не тут то было, ФСС без объявления войны выкатил новый формат ЭЛН, который выгружается для работодателей, и уже импортируется в системы.

У нас Аксапта 2009, внедрены расчеты с персоналом и кадры.
Был пару лет назад разработан импорт ЭЛН из xml файла.

Сейчас поменялся формат, начал дорабатывать и столкнулся с какой то очень плохой штукой.

Был формат такой, что перед каждым тегом стоял префикс ns1:
Аксапта это все хорошо кушала, и все было хорошо.
Сейчас ФСС с большей половины тегов убрала префиксы оставила только сами теги.
Так вот без префиксов файл не читается.

Внимание вопрос!

Было ли у кого что-то подобное, при парсинге xml? Может какие то есть другие способы получить данные?

Может я неправильно что-то делаю.

Почитал форум но ничего для себя не нашел..

Старый XML
PHP код:
-<ns1:ROW>
<
ns1:SNILS>1083353552378</ns1:SNILS>
<
ns1:SURNAME>Иванов</ns1:SURNAME>
<
ns1:NAME>Иван</ns1:NAME>
<
ns1:PATRONIMIC>Сергеевич</ns1:PATRONIMIC>
<
ns1:BOZ_FLAG>0</ns1:BOZ_FLAG>
<
ns1:LPU_EMPLOYER>ООО ДРУЖБА </ns1:LPU_EMPLOYER>
<
ns1:BIRTHDAY>1987-09-05</ns1:BIRTHDAY>
<
ns1:GENDER>0</ns1:GENDER
Старый код
X++:
//Считывание файла xml
    doc = XmlDocument::newFile(filename);
    
    nsmgr = new XmlNamespaceManager(doc.nameTable());

    nsMgr.addNamespace('ns1','http://ru/ibs/fss/ln/ws/FileOperationsLn.wsdl');

    NodeListRow = doc.selectNodes('//ns1:ROW',nsMgr);

    elementRow = NodeListRow.nextNode();

    while (elementRow)
    {
        nodeNAME = elementRow.selectSingleNode('ns1:NAME',nsMgr);
        If (nodeNAME)
        NAME = nodeNAME.text();
    }
Новый XML
PHP код:
-
<
responseRow>
<
snils>15353535354</snils>
<
surname>Ильина</surname>
<
name>ТАТЬЯНА</name>
<
patronymic>Сергеевна</patronymic>
<
lnCode>910048299791</lnCode>
<
primaryFlag>true</primaryFlag>
<
duplicateFlag>false</duplicateFlag>
<
lnDate>2020-12-09</lnDate>
<
lpuName>ГАУЗ " ЦРБ"</lpuName
Новый код
X++:
doc = XmlDocument::newFile(filename);

NodeListRow = doc.selectNodes('//responseRow');

elementRow = NodeListRow.nextNode();

while (elementRow)
{
        info(elementRow.selectSingleNode('Name').text());
        elementRow = NodeListRow.nextNode();
}
Старый 22.12.2020, 01:20   #2  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,311 / 3547 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от rootx Посмотреть сообщение
Может какие то есть другие способы получить данные?
Добрый день! А читать через класс XmlReader не пробовали? Файл-то аккурат под этот класс сделан. Основное преимущество - не закачивается сразу весь файл и не валидируется XML в целом, т.е. быстрее должен пройти импорт и меньше кушать памяти.
В классе TaxSaxDocumentHandler_AU есть хороший пример
X++:
void parseFile(str filename)
{
    XmlReader reader;
    XmlNodeType nodeType;
    ;

    reader = XmlTextReader::newFile(filename);
    while (reader.read())
    {
        nodeType = reader.nodeType();
        switch(nodeType)
        {
            case XmlNodeType::Element:
                this.startElement(reader);
                break;

            case XmlNodeType::Text:
                this.characters(reader.value());
                break;
        }
    }
}
X++:
void startElement(XmlReader reader)
{
    str qName;
    ;

    qName = reader.name();

    if (qName == 'field')
    {
        fieldID = reader.getAttribute2('ID');
    }
    else if (qName != 'value')
    {
        fieldID = '';
    }

    tmpData = '';
}
Вот еще ссылка, как этот класс в C# отрабатывает
https://stackoverflow.com/questions/...der-in-c-sharp

И общие сведения о классе (официальная документация Microsoft): https://docs.microsoft.com/ru-ru/dot...tframework-4.8
__________________
Возможно сделать все. Вопрос времени

Последний раз редактировалось sukhanchik; 22.12.2020 в 01:48.
За это сообщение автора поблагодарили: trud (3), Logger (3), Ace of Database (3), rootx (1).
Старый 22.12.2020, 08:03   #3  
rootx is offline
rootx
Участник
 
28 / 18 (1) ++
Регистрация: 17.02.2008
Года два назад при разработке первого импорта смотрел в в сторону XmlReader, но что-то тогда не получилось, сейчас детально буду разбирать. Спасибо за примеры. По АОТу тоже уже искал примеры.
Старый 22.12.2020, 08:17   #4  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Парзеру xml должно быть все ты равно на префиксы главное чтобы неймспейс был тот же. Прочитайте как устроен xml - про префиксы и неймспесы. Приведите пожалуйста разницу в декларации неймспейсов. https://www.w3schools.com/xml/xml_namespaces.asp
За это сообщение автора поблагодарили: rootx (1).
Старый 22.12.2020, 13:13   #5  
rootx is offline
rootx
Участник
 
28 / 18 (1) ++
Регистрация: 17.02.2008
Цитата:
А читать через класс XmlReader не пробовали?
Спасибо! Все получилось через данный класс. XML парсится хорошо, все подхватывает.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Приведите пример рабочего .xml файла netget DAX: Программирование 4 17.09.2017 11:31
kurthatlevik: AX suggestion: XML Columns and XML indexes Blog bot DAX Blogs 0 28.10.2015 20:11
kurthatlevik: AX suggestion: XML Columns and XML indexes Blog bot DAX Blogs 0 28.08.2015 13:11
Формирование XML файла - приведите пример плиз! Pavlo AKA Panok DAX: Программирование 18 20.02.2008 23:41
Импорт данных из XML файла Sanek DAX: Программирование 0 01.04.2005 17:56

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 22:50.