Здравствуйте! Все вроде было хорошо, и новый год близко.
Но не тут то было, ФСС без объявления войны выкатил новый формат ЭЛН, который выгружается для работодателей, и уже импортируется в системы.
У нас Аксапта 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();
}