需要一個帶有前綴的節點,但他這樣做是正確的方式,是我做的失敗嗎?或者是一個編譯器錯誤?XML節點中的不完整前綴
主要模塊代碼
function Generar_Addenda(PathCFD : String; ValidaOnly : Integer) : Integer;
const
xmlns = 'xmlns=""'; (* Cadena String a Borrar, (se genera al obtener la interaz Factura) *)
var
XMLFactura : IXMLDocument;
Factura : IXMLFactura;
CFD : TCFD;
begin
Try
CFD := TCFD.Create(cfdV22); // AQUI CREO UNA INSTANCIA DEL CFD, PARA TENER LA CLASE COMPLETA
CFD.LoadFromFile(PathCFD); // AQUI CARGO EL XML YA SELLADO, LISTO PARA PEGAR LA ADDENDA
XMLFactura := TXMLDocument.Create(Nil);
XMLFactura.Active := True;
Factura := GetFactura(XMLFactura);
// ************* PERSONALIZAR ADDENDA CHRYSLER PPY ********************** AQUI LLENO LA ADDENDA CON LOS DATOS DE LA BASE DE DATOS
With Factura do
begin
TipoDocumento := cds_cliente.FieldByName('TipoDocumento').AsString;
TipoDocumentoFiscal := cds_Cliente.FieldByName('TipoDocumentoFiscal').AsString;
Version := cds_Cliente.FieldByName('Version').AsString;
......
.....
end;
FACTURA.OwnerDocument.Options := [doAutoPrefix];
CFD.Datos.Addenda.ChildNodes.Add(Factura);
Factura.SetAttributeNS('xmlns:PPY','', 'http://www.dfdchryslerdemexico.com.mx/Addenda/PPY');
Factura.Attributes['xsi:schemaLocation'] := 'http://www.dfdchryslerdemexico.com.mx/Addenda/PPY http://www.dfdchryslerdemexico.com.mx/Addenda/PPY/PPY.XSD';
CFD.SaveToFile('C:\Paso\CFD_PRUEBA_ADDENDA_CHRYSLER.XML');
Finally
......
......
End;
我做的界面Intf_PPY我所做的更改內容如下所示,在PPY前置節點名稱將factura
function Getfactura(Doc: IXMLDocument): IXMLFactura;
function Loadfactura(const FileName: string): IXMLFactura;
function Newfactura: IXMLFactura;
const
TargetNamespace =
'http://www.dfdchryslerdemexico.com.mx/Addenda/PPY'; // xsi:schemaLocation="http://www.dfdchryslerdemexico.com.mx/Addenda/PPY http://www.dfdchryslerdemexico.com.mx/Addenda/PPY/PPY.XSD"';
implementation
{ Global Functions }
function Getfactura(Doc: IXMLDocument): IXMLFactura;
begin
Result := Doc.GetDocBinding('PPY:factura', TXMLFactura, TargetNamespace) as IXMLFactura;
end;
function Loadfactura(const FileName: string): IXMLFactura;
begin
Result := LoadXMLDocument(FileName).GetDocBinding('PPY:factura', TXMLFactura, TargetNamespace) as IXMLFactura;
end;
function Newfactura: IXMLFactura;
begin
Result := NewXMLDocument.GetDocBinding('PPY:factura', TXMLFactura, TargetNamespace) as IXMLFactura;
end;
,這就是我發現,與節點注意,otroscargos,部分沒有前綴,但與其中包含命名空間
<Addenda>
<PPY:factura tipoDocumento="PPY" TipoDocumentoFiscal="FA" version="1.0" serie="A" folioFiscal="451" fecha="2012-06-20" montoTotal="9960.98" referenciaProveedor="A 451" xmlns:PPY="http://www.dfdchryslerdemexico.com.mx/Addenda/PPY" xsi:schemaLocation="http://www.dfdchryslerdemexico.com.mx/Addenda/PPY http://www.dfdchryslerdemexico.com.mx/Addenda/PPY/PPY.XSD">
<PPY:moneda tipoMoneda="USD" tipoCambio="1.0000"/>
<PPY:proveedor codigo="20215" nombre="NOMBRE DE LA EMPRESA S.A. DE C.V."/>
<PPY:destino codigo="8476" nombre="PLANTA DE MOTORES 4 CILINDROS - SALTILLO"/>
<nota xmlns="http://www.dfdchryslerdemexico.com.mx/Addenda/PPY">Addenda de Prueba</nota>
<otrosCargos xmlns="http://www.dfdchryslerdemexico.com.mx/Addenda/PPY" codigo="V6" monto="1373.93"/>
<PPY:partes>
<part xmlns="http://www.dfdchryslerdemexico.com.mx/Addenda/PPY" numero="123456" cantidad="1.0000" unidadDeMedida="EA" precioUnitario="8587.0500" montoDeLinea="8587.05">
<references ordenCompra="XYZ6675" releaseRequisicion="XYZ4218000" ammendment="A"/>
<nota>Probando Addenda</nota>
</part>
</PPY:partes>
</PPY:factura>
</Addenda>
我做錯了什麼?還是有另一種方法可行?
感謝
你有什麼期望_see_?如果編譯好的話,這可能是一個編譯器錯誤? – jachguate
**必須在所有項目上出現PPY前綴**,並且如果您查看元素** nota,otrosCargos,part,參考**不是名稱的一部分 –