Перебор тегов и атрибутов в цикле, локальные флаги... Не, спасибо. Да и желания копаться в устаревшей библиотеке, которая не поддерживает современные методы работы с xml, совсем нет. Лучше уж easy xml купить, если использование скриптов как стандартный интерфейс к нестандартным для клариона вещам, не устраивает. Там, конечно, тоже смотреть надо, но я, в целом, в Михаила верю. ПыСы. Я когда-то давно пробовал посмотреть код внутри "штатного" парсера xml, мне плохо стало, закрыл, и сделал на скриптах, где все просто и понятно, как капуста.
Если интересно, вот выжимка загрузки накладной в Егаис, используя xpath. Почувствуйте разницу.
Код: Выделить всё
getDocNS_r routine !загрузить накладную (нестандартная, версия 4)
DATA
lor:group group, pre()
lor:inn string(20), name('oref:UL/oref:INN')
lor:kpp string(20), name('oref:UL/oref:KPP')
lor:idPost string(20), name('oref:UL/oref:ClientRegId')
lor:docNum string(20), name('wb:NUMBER')
lor:docDate string(20), name('wb:Date')
lor:name string(80), name('oref:UL/oref:ShortName')
lor:address string(150), name('oref:UL/oref:address/oref:description')
lor:flagOwner string(10), name('wb:ChangeOwnership')
.
lor:queue queue, pre()
lor:ident string(40), name('wb:Identity')
lor:kol string(20), name('wb:Quantity')
lor:cena string(20), name('wb:Price')
lor:alcoCode string(40), name('wb:Product/pref:AlcCode')
lor:alcoVal string(20), name('wb:Product/pref:AlcVolume')
lor:alcoCap string(20), name('wb:Product/pref:Capacity')
lor:alcoProdCode string(20), name('wb:Product/pref:ProductVCode')
lor:formaA string(40), name('wb:FARegId')
lor:formaB string(40), name('wb:InformF2/ce:F2RegId')
lor:idProizv string(20), name('wb:Product/pref:Producer/oref:UL/oref:ClientRegId')
lor:NameProizv string(150), name('wb:Product/pref:Producer/oref:UL/oref:ShortName')
lor:NameProizvF string(150), name('wb:Product/pref:Producer/oref:UL/oref:FullName')
lor:INNProizv string(20), name('wb:Product/pref:Producer/oref:UL/oref:INN')
lor:KPPProizv string(20), name('wb:Product/pref:Producer/oref:UL/oref:KPP')
lor:CountryProizv string(10), name('wb:Product/pref:Producer/oref:UL/oref:address/oref:Country')
lor:RegionProizv string(10), name('wb:Product/pref:Producer/oref:UL/oref:address/oref:RegionCode')
lor:IndexProizv string(20), name('wb:Product/pref:Producer/oref:UL/oref:address/oref:Index')
lor:AdressProizv string(255), name('wb:Product/pref:Producer/oref:UL/oref:address/oref:description')
lor:idProizv_ts string(20), name('wb:Product/pref:Producer/oref:TS/oref:ClientRegId')
lor:NameProizv_ts string(150), name('wb:Product/pref:Producer/oref:TS/oref:ShortName')
lor:NameProizvF_ts string(150), name('wb:Product/pref:Producer/oref:TS/oref:FullName')
lor:INNProizv_ts string(20), name('wb:Product/pref:Producer/oref:TS/oref:INN')
lor:KPPProizv_ts string(20), name('wb:Product/pref:Producer/oref:TS/oref:KPP')
lor:CountryProizv_ts string(10), name('wb:Product/pref:Producer/oref:TS/oref:address/oref:Country')
lor:RegionProizv_ts string(10), name('wb:Product/pref:Producer/oref:TS/oref:address/oref:RegionCode')
lor:IndexProizv_ts string(20), name('wb:Product/pref:Producer/oref:TS/oref:address/oref:Index')
lor:AdressProizv_ts string(255), name('wb:Product/pref:Producer/oref:TS/oref:address/oref:description')
lor:idProizv_fo string(20), name('wb:Product/pref:Producer/oref:FO/oref:ClientRegId')
lor:NameProizv_fo string(150), name('wb:Product/pref:Producer/oref:FO/oref:ShortName')
lor:NameProizvF_fo string(150), name('wb:Product/pref:Producer/oref:FO/oref:FullName')
lor:INNProizv_fo string(20), name('wb:Product/pref:Producer/oref:FO/oref:INN')
lor:KPPProizv_fo string(20), name('wb:Product/pref:Producer/oref:FO/oref:KPP')
lor:CountryProizv_fo string(10), name('wb:Product/pref:Producer/oref:FO/oref:address/oref:Country')
lor:RegionProizv_fo string(10), name('wb:Product/pref:Producer/oref:FO/oref:address/oref:RegionCode')
lor:IndexProizv_fo string(20), name('wb:Product/pref:Producer/oref:FO/oref:address/oref:Index')
lor:AdressProizv_fo string(255), name('wb:Product/pref:Producer/oref:FO/oref:address/oref:description')
lor:nameTovar string(255), name('wb:Product/pref:ShortName')
lor:nameTovarFull string(255), name('wb:Product/pref:FullName')
.
code
Loc:NameTmp=GetNameTmp(FsAccess:ActiveUserDir,'xml',0) !имена временных файлов
Loc:NameVbsTmp=GetNameTmp(FsAccess:ActiveUserDir,'vbs',0)
Loc:NameOutTmp=GetNameTmp(FsAccess:ActiveUserDir,'txt',0)
fsXmlPar.init(Loc:NameTmp,Loc:NameVbsTmp,Loc:NameOutTmp)
fsXmlPar.EgaisNameSpace(4,0)
fsXmlPar.UnicodeRestr
fsXmlPar.UnicodeFieldAdd('address/oref:description')
fsXmlPar.LoadGroupNS('//ns:Document/ns:WayBill_v4/wb:Header','lor:group',lor:group) !реквизиты шапки накладной
fsXmlPar.LoadGroupNS('//ns:Document/ns:WayBill_v4/wb:Header/wb:Shipper','lor:group',lor:group)
fsXmlPar.LoadQueueNS('//ns:Document/ns:WayBill_v4/wb:Content/wb:Position','lor:queue',lor:queue) !строки накладной
fsXmlPar.MakeScript(1)
if fsXmlPar.ErrorCode<>0
FsMessagePr('Ошибка! ' & clip(fsXmlPar.ErrorMessage))
.
fsXmlPar.kill