02-06-2019, 12:50 PM
Passo avanti...
Invece di fare:
class function TeiInvoiceFactory.InternalNewInvoiceFromString(const AStringXML: String): IeiInvoiceEx;
var
LEpuratedStringXML: String;
begin
LEpuratedStringXML := StringReplace(AStringXML, '<p:', '<', [rfReplaceAll, rfIgnoreCase]);
LEpuratedStringXML := StringReplace(LEpuratedStringXML, '</p:', '</', [rfReplaceAll, rfIgnoreCase]);
Result := LoadXMLData(LEpuratedStringXML).GetDocBinding('FatturaElettronica', TeiInvoiceEx, TargetNamespace) as IeiInvoiceEx;
end;
Faccio:
class function TeiInvoiceFactory.InternalNewInvoiceFromString(const AStringXML: String): IeiInvoiceEx;
var
LDocument: IXMLDocument;
LNodeElement: IXMLNode;
begin
LDocument := TXMLDocument.Create(nil);
LDocument.LoadFromXML(AStringXML);
{ Find a specific node. }
LNodeElement := LDocument.ChildNodes.FindNode('FatturaElettronica');
Result := LoadXMLData(AStringXML).GetDocBinding('FatturaElettronica', TeiInvoiceEx, LNodeElement.NamespaceURI) as IeiInvoiceEx;
end;
ed il nodo lo leggo, il problema ora è che non riesco a leggere nel namespace corretto i sottonodi:
procedure TXMLFatturaElettronicaType.AfterConstruction;
begin
RegisterChildNode( 'FatturaElettronicaHeader', TXMLFatturaElettronicaHeaderType);
RegisterChildNode('FatturaElettronicaBody', TXMLFatturaElettronicaBodyType);
RegisterChildNode('Signature', TXMLSignatureType_ds);
FFatturaElettronicaBody := CreateCollection(TXMLFatturaElettronicaBodyTypeList, IXMLFatturaElettronicaBodyType,
'FatturaElettronicaBody') as IXMLFatturaElettronicaBodyTypeList;
inherited;
end;
Vorrei fare anche qui lo stesso trucco, ma non riesco a trovare l'XML da cui fare la ricerca generica del nodo!!!
Invece di fare:
class function TeiInvoiceFactory.InternalNewInvoiceFromString(const AStringXML: String): IeiInvoiceEx;
var
LEpuratedStringXML: String;
begin
LEpuratedStringXML := StringReplace(AStringXML, '<p:', '<', [rfReplaceAll, rfIgnoreCase]);
LEpuratedStringXML := StringReplace(LEpuratedStringXML, '</p:', '</', [rfReplaceAll, rfIgnoreCase]);
Result := LoadXMLData(LEpuratedStringXML).GetDocBinding('FatturaElettronica', TeiInvoiceEx, TargetNamespace) as IeiInvoiceEx;
end;
Faccio:
class function TeiInvoiceFactory.InternalNewInvoiceFromString(const AStringXML: String): IeiInvoiceEx;
var
LDocument: IXMLDocument;
LNodeElement: IXMLNode;
begin
LDocument := TXMLDocument.Create(nil);
LDocument.LoadFromXML(AStringXML);
{ Find a specific node. }
LNodeElement := LDocument.ChildNodes.FindNode('FatturaElettronica');
Result := LoadXMLData(AStringXML).GetDocBinding('FatturaElettronica', TeiInvoiceEx, LNodeElement.NamespaceURI) as IeiInvoiceEx;
end;
ed il nodo lo leggo, il problema ora è che non riesco a leggere nel namespace corretto i sottonodi:
procedure TXMLFatturaElettronicaType.AfterConstruction;
begin
RegisterChildNode( 'FatturaElettronicaHeader', TXMLFatturaElettronicaHeaderType);
RegisterChildNode('FatturaElettronicaBody', TXMLFatturaElettronicaBodyType);
RegisterChildNode('Signature', TXMLSignatureType_ds);
FFatturaElettronicaBody := CreateCollection(TXMLFatturaElettronicaBodyTypeList, IXMLFatturaElettronicaBodyType,
'FatturaElettronicaBody') as IXMLFatturaElettronicaBodyTypeList;
inherited;
end;
Vorrei fare anche qui lo stesso trucco, ma non riesco a trovare l'XML da cui fare la ricerca generica del nodo!!!