Показать сообщение отдельно
Старый 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();
}