How to correctly read XML to import the data into a table?
isabtogumon
Member Posts: 50
Hi,
Currently I have a procedure that reads and imports some elements from the XML to a table correctly, I only need to read some elements well, since some fields are repeated when they are imported.
I get the XML of a response from a WS, the response is stored in InStream and then I read it to import the information into a table, this is part of the code.
So that I can read some elements I had to add a double slash (//) since if I didn't I would see an error similar to this: "The XPath query 'ns:Lote' does not match any nodes", with the code above I I'm not getting that error and the records import apparently fine, but repeated. What should I do so that the records are not repeated in cases that must start with a double bar or what should I do to avoid putting them?
This is the structure of the XML

Currently I have a procedure that reads and imports some elements from the XML to a table correctly, I only need to read some elements well, since some fields are repeated when they are imported.
I get the XML of a response from a WS, the response is stored in InStream and then I read it to import the information into a table, this is part of the code.
if Client.Send(RequestMessage, ResponseMessage) then begin
ResponseMessage.Content().ReadAs(InStrmResponse);
Data.SetCurrentKey(TempLineNo);
if Data.Find('+') then
TempLineNo := Data.TempLineNo;
if XmlDocument.ReadFrom(InStrmResponse, xmlDoc) then begin
xmlnsMgr.AddNamespace('ns', 'http://www.company.com.br');
if xmlDoc.SelectNodes('//ns:Movimentacao', xmlnsMgr, xmlNodList) then begin
foreach xmlNodRoot in xmlNodList do begin
xmlNodRoot.SelectSingleNode('ns:Codigo', xmlnsMgr, xmlNod1);
xmlNodRoot.SelectSingleNode('ns:TipoMovimentacao', xmlnsMgr, xmlNod2);
xmlNodRoot.SelectSingleNode('ns:DataMovimentacao', xmlnsMgr, xmlNod3);
xmlNodRoot.SelectSingleNode('ns:EmpresaOrigem/ns:IDUnihealth', xmlnsMgr, xmlNod4);
xmlNodRoot.SelectSingleNode('ns:CentroCustoOrigem/ns:IDUnihealth', xmlnsMgr, xmlNod5);
xmlNodRoot.SelectSingleNode('//ns:CentroCustoOrigem/ns:CodigoExterno', xmlnsMgr, xmlNod6);
xmlNodRoot.SelectSingleNode('ns:EmpresaDestino/ns:IDUnihealth', xmlnsMgr, xmlNod7);
xmlNodRoot.SelectSingleNode('ns:CentroCustoDestino/ns:IDUnihealth', xmlnsMgr, xmlNod8);
xmlNodRoot.SelectSingleNode('//ns:CentroCustoDestino/ns:CodigoExterno', xmlnsMgr, xmlNod9);
xmlNodRoot.SelectSingleNode('ns:TipoDocumento', xmlnsMgr, xmlNod10);
xmlNodRoot.SelectSingleNode('//ns:CodigoDocumento', xmlnsMgr, xmlNod11);
xmlNodRoot.SelectSingleNode('ns:Produto/ns:IDUnihealth', xmlnsMgr, xmlNod12);
xmlNodRoot.SelectSingleNode('ns:Produto/ns:CodigoExterno', xmlnsMgr, xmlNod13);
xmlNodRoot.SelectSingleNode('//ns:CodigoProdutoSecundario', xmlnsMgr, xmlNod14);
xmlNodRoot.SelectSingleNode('//ns:CodigoEmbalagemProduto', xmlnsMgr, xmlNod15);
xmlNodRoot.SelectSingleNode('ns:Quantidade', xmlnsMgr, xmlNod16);
xmlNodRoot.SelectSingleNode('ns:Valor', xmlnsMgr, xmlNod17);
xmlNodRoot.SelectSingleNode('ns:Lote', xmlnsMgr, xmlNod18);
xmlNodRoot.SelectSingleNode('ns:Validade', xmlnsMgr, xmlNod19);
xmlNodRoot.SelectSingleNode('ns:CodigoItemDocumento', xmlnsMgr, xmlNod20);
xmlNodRoot.SelectSingleNode('ns:Usuario', xmlnsMgr, xmlNod21);
xmlNodRoot.SelectSingleNode('ns:CodigoEtiqueta', xmlnsMgr, xmlNod22);
xmlNodRoot.SelectSingleNode('ns:Identificador', xmlnsMgr, xmlNod23);
TempLineNo := TempLineNo + 1;
Data.TempLineNo := TempLineNo;
Data.Init();
Data.Insert(true);
Data.Codigo := (xmlNod1.AsXmlElement().InnerXml);
Data.TipoMovimentacao := (xmlNod2.AsXmlElement().InnerText);
txtDate := (xmlNod3.AsXmlElement().InnerText);
txtNewDate := CopyStr(txtDate, 1, 4)
+ '-' + CopyStr(txtDate, 6, 2)
+ '-' + CopyStr(txtDate, 9, 2)
+ ' ' + CopyStr(txtDate, 12, 2)
+ ':' + CopyStr(txtDate, 15, 2)
+ ':' + CopyStr(txtDate, 18, 2);
Evaluate(formatDate, txtNewDate);
Data.DateMovimentacao := formatDate;
Data.EmpresaOrigemIDUnihealth := (xmlNod4.AsXmlElement().InnerText);
Data.CentroCustoOrigemIDUnihealth := (xmlNod5.AsXmlElement().InnerText);
Data.CentroCustoOrigemCodExterno := (xmlNod6.AsXmlElement().InnerText);
Data.EmpresaDestinoIDUnihealth := (xmlNod7.AsXmlElement().InnerText);
Data.CentroCustDestinoIDUnihealth := (xmlNod8.AsXmlElement().InnerText);
Data.CentroCustDestinoIDCodExterno := (xmlNod9.AsXmlElement().InnerText);
Data.TipoDocumento := (xmlNod10.AsXmlElement().InnerText);
Data.CodigoDocumento := (xmlNod11.AsXmlElement().InnerText);
Data.ProductoIDUnihealth := (xmlNod12.AsXmlElement().InnerText);
Data.ProductoCodigoExterno := (xmlNod13.AsXmlElement().InnerText);
Data.CodigoProdutoSecundario := (xmlNod14.AsXmlElement().InnerText);
Data.CodigoEmbalagemProduto := (xmlNod15.AsXmlElement().InnerText);
Data.Quantidade := (xmlNod16.AsXmlElement().InnerText);
Data.Valor := (xmlNod17.AsXmlElement().InnerText);
Data.Lote := (xmlNod18.AsXmlElement().InnerText);
Data.Validade := (xmlNod19.AsXmlElement().InnerText);
Data.CodigoItemDocumento := (xmlNod20.AsXmlElement().InnerText);
Data.Usuario := (xmlNod21.AsXmlElement().InnerText);
Data.CodigoEtiqueta := (xmlNod22.AsXmlElement().InnerText);
Data.Identificador := (xmlNod23.AsXmlElement().InnerText);
Data.Modify(true);
end;
end;
end;
So that I can read some elements I had to add a double slash (//) since if I didn't I would see an error similar to this: "The XPath query 'ns:Lote' does not match any nodes", with the code above I I'm not getting that error and the records import apparently fine, but repeated. What should I do so that the records are not repeated in cases that must start with a double bar or what should I do to avoid putting them?
This is the structure of the XML

0
Categories
- All Categories
- 73 General
- 73 Announcements
- 66.7K Microsoft Dynamics NAV
- 18.7K NAV Three Tier
- 38.4K NAV/Navision Classic Client
- 3.6K Navision Attain
- 2.4K Navision Financials
- 116 Navision DOS
- 851 Navision e-Commerce
- 1K NAV Tips & Tricks
- 772 NAV Dutch speaking only
- 617 NAV Courses, Exams & Certification
- 2K Microsoft Dynamics-Other
- 1.5K Dynamics AX
- 324 Dynamics CRM
- 111 Dynamics GP
- 10 Dynamics SL
- 1.5K Other
- 990 SQL General
- 383 SQL Performance
- 34 SQL Tips & Tricks
- 35 Design Patterns (General & Best Practices)
- 1 Architectural Patterns
- 10 Design Patterns
- 5 Implementation Patterns
- 53 3rd Party Products, Services & Events
- 1.6K General
- 1.1K General Chat
- 1.6K Website
- 83 Testing
- 1.2K Download section
- 23 How Tos section
- 252 Feedback
- 12 NAV TechDays 2013 Sessions
- 13 NAV TechDays 2012 Sessions