Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   ¿Delphi XML como escribir leer NameSpaces? (https://www.clubdelphi.com/foros/showthread.php?t=72294)

JXJ 09-02-2011 04:32:07

¿Delphi XML como escribir leer NameSpaces?
 
1 Archivos Adjunto(s)
Hola

ando trabajando en lo que es el CFDI
para la facturacion electronica en México.

este es el XML que da el sat
Código:

<?xml version="1.0" encoding="utf-8"?>
<cfdi:Comprobante xsi:schemaLocation="http://www.sat.gob.mx/cfd/3 cfdv3.xsd" xmlns:cfdi="http://www.sat.gob.mx/cfd/3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 version="3.0"
 folio="123456"
 fecha="2011-03-06T20:38:12"
 sello="ll858RRUo3RHkdawp5Jy/TENtijth0TXEizBRwiCZhkanijbNH8Hh6C2XRk1wUsR&#xA;T0q+3HrO2bNgMS7cPr4p2ee+2N/6zVPzhjt0hfK8r3rF+VLArhGKQaBynlzMpL/A&#xA;up1Oc4fDjZA1MbtbZblLxFNG8/TeCJjQogo7+uYBMB4=&#xA;"
 total="488.50"
 subTotal="466.43"
 Moneda="MXP"
 certificado="MIIE/TCCA+WgAwIBAgIUMzAwMDEwMDAwMDAxMDAwMDA4MDAwDQYJKoZIhvcNAQEFBQAwggFvMRgwFgYDVQQDDA9BLkMuIGRlIHBydWViYXMxLzAtBgNVBAoMJlNlcnZpY2lvIGRlIEFkbWluaXN0cmFjacOzbiBUcmlidXRhcmlhMTgwNgYDVQQLDC9BZG1pbmlzdHJhY2nDs24gZGUgU2VndXJpZGFkIGRlIGxhIEluZm9ybWFjacOzbjEpMCcGCSqGSIb3DQEJARYaYXNpc25ldEBwcnVlYmFzLnNhdC5nb2IubXgxJjAkBgNVBAkMHUF2LiBIaWRhbGdvIDc3LCBDb2wuIEd1ZXJyZXJvMQ4wDAYDVQQRDAUwNjMwMDELMAkGA1UEBhMCTVgxGTAXBgNVBAgMEERpc3RyaXRvIEZlZGVyYWwxEjAQBgNVBAcMCUNveW9hY8OhbjEVMBMGA1UELRMMU0FUOTcwNzAxTk4zMTIwMAYJKoZIhvcNAQkCDCNSZXNwb25zYWJsZTogSMOpY3RvciBPcm5lbGFzIEFyY2lnYTAeFw0xMDA3MzAxNjU4NDBaFw0xMjA3MjkxNjU4NDBaMIGWMRIwEAYDVQQDDAlNYXRyaXogU0ExEjAQBgNVBCkMCU1hdHJpeiBTQTESMBAGA1UECgwJTWF0cml6IFNBMSUwIwYDVQQtExxBQUEwMTAxMDFBQUEgLyBBQUFBMDEwMTAxQUFBMR4wHAYDVQQFExUgLyBBQUFBMDEwMTAxSERGUlhYMDExETAPBgNVBAsMCFVuaWRhZCAxMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDD0ltQNthUNUfzq0t1GpIyapjzOn1W5fGM5G/pQyMluCzP9YlVAgBjGgzwYp9Z0J9gadg3y2ZrYDwvv8b72goyRnhnv3bkjVRKlus6LDc00K7Jl23UYzNGlXn5+i0HxxuWonc2GYKFGsN4rFWKVy3Fnpv8Z2D7dNqsVyT5HapEqwIDAQABo4HqMIHnMAwGA1UdEwEB/wQCMAAwCwYDVR0PBAQDAgbAMB0GA1UdDgQWBBSYodSwRczzj5H7mcO3+mAyXz+y0DAuBgNVHR8EJzAlMCOgIaAfhh1odHRwOi8vcGtpLnNhdC5nb2IubXgvc2F0LmNybDAzBggrBgEFBQcBAQQnMCUwIwYIKwYBBQUHMAGGF2h0dHA6Ly9vY3NwLnNhdC5nb2IubXgvMB8GA1UdIwQYMBaAFOtZfQQimlONnnEaoFiWKfU54KDFMBAGA1UdIAQJMAcwBQYDKgMEMBMGA1UdJQQMMAoGCCsGAQUFBwMCMA0GCSqGSIb3DQEBBQUAA4IBAQArHQEorApwqumSn5EqDOAjbezi8fLco1cYES/PD+LQRM1Vb1g7VLE3hR4S5NNBv0bMwwWAr0WfL9lRRj0PMKLorO8y4TJjRU8MiYXfzSuKYL5Z16kW8zlVHw7CtmjhfjoIMwjQo3prifWxFv7VpfIBstKKShU0qB6KzUUNwg2Ola4t4gg2JJcBmyIAIInHSGoeinR2V1tQ10aRqJdXkGin4WZ75yMbQH4L0NfotqY6bpF2CqIY3aogQyJGhUJji4gYnS2DvHcyoICwgawshjSaX8Y0Xlwnuh6EusqhqlhTgwPNAPrKIXCmOWtqjlDhho/lhkHJMzuTn8AoVapbBUnj"
 formaDePago="PAGO EN UNA SOLA EXHIBICION"
 noCertificado="30001000000100000800"
 tipoDeComprobante="ingreso">
  <cfdi:Emisor rfc="PPL961114GZ1" nombre="PHARMA PLUS SA DE CV">
    <cfdi:DomicilioFiscal pais="Mexico" calle="AV. RIO MIXCOAC" estado="MEXICO, D.F." colonia="ACACIAS" municipio="BENITO JUAREZ" noExterior="No. 140" codigoPostal="03240" />
    <cfdi:ExpedidoEn pais="Mexico" calle="AV. UNIVERSIDAD" estado="DISTRITO FEDERAL" colonia="OXTOPULCO" noExterior="1858" codigoPostal="03910" />
  </cfdi:Emisor>
  <cfdi:Receptor rfc="PEPJ8001019Q8" nombre="JUAN PEREZ PEREZ">
    <cfdi:Domicilio pais="Mexico" calle="AV UNIVERSIDAD" estado="DISTRITO FEDERAL" colonia="COPILCO UNIVERSIDAD" municipio="COYOACAN" noExterior="16 EDF 3" noInterior="DPTO 101" codigoPostal="04360" />
  </cfdi:Receptor>
  <cfdi:Conceptos>
    <cfdi:Concepto unidad="CAPSULAS" importe="244.00" cantidad="1.0" descripcion="VIBRAMICINA 100MG 10" valorUnitario="244.00" />
    <cfdi:Concepto unidad="BOTELLA" importe="137.93" cantidad="1.0" descripcion="CLORUTO 500M" valorUnitario="137.93" />
    <cfdi:Concepto unidad="TABLETAS" importe="84.50" cantidad="1.0" descripcion="SEDEPRON 250MG 10" valorUnitario="84.50" />
    <cfdi:Concepto unidad="TABLETAS" importe="84.50" cantidad="1.0" descripcion="SEDEPRON 250MG 10" valorUnitario="84.50" />   
   
  </cfdi:Conceptos>
  <cfdi:Impuestos>
    <cfdi:Traslados>
      <cfdi:Traslado tasa="0.00" importe="0.00" impuesto="IVA" />
      <cfdi:Traslado tasa="16.00" importe="22.07" impuesto="IVA" />
    </cfdi:Traslados>
  </cfdi:Impuestos>
  <cfdi:Complemento>
    <tfd:TimbreFiscalDigital xmlns:tfd="http://www.sat.gob.mx/TimbreFiscalDigital" xsi:schemaLocation="http://www.sat.gob.mx/TimbreFiscalDigital TimbreFiscalDigital.xsd" selloCFD="ll858RRUo3RHkdawp5Jy/TENtijth0TXEizBRwiCZhkanijbNH8Hh6C2XRk1wUsR&#xA;T0q+3HrO2bNgMS7cPr4p2ee+2N/6zVPzhjt0hfK8r3rF+VLArhGKQaBynlzMpL/A&#xA;up1Oc4fDjZA1MbtbZblLxFNG8/TeCJjQogo7+uYBMB4=&#xA;" FechaTimbrado="2011-03-06T20:40:10" UUID="ad662d33-6934-459c-a128-bdf0393e0f44" noCertificadoSAT="30001000000100000801" version="1.0" selloSAT="j2gGwF26lCgiMEj7IlVTDaQrAsOtVU7yO6idRZrSXYnarFQ5cbUE79WER4O8g+TZ&#xA;pYnyeOoH7DskvzeSMlCG67Tp/+Rx74CSTvzLtfDjEK6mmzKHylcWMn9SizIGWRDB&#xA;RrxOv5P2BPLIwTY1/HUQ7I46/eBzAuTLHsiDhsNJCMk=&#xA;" />
  </cfdi:Complemento>
  <cfdi:Addenda />
</cfdi:Comprobante>

mi problema es que al usar delphi y el databinding
no se reconoce los que es cfdi:

</cfdi:Impuestos>
no logro crear el archivo XML que conenga ese namespace
solo sin ese nameespace

hize chapuza haciendo este archivo que es el que uso lo adjunte


y otro problema que tengo es como leer la informacion del timbrefiscal

Código:

<cfdi:Complemento>
  <tfd:TimbreFiscalDigital xmlns:tfd="http://www.sat.gob.mx/TimbreFiscalDigital" xsi:schemaLocation="http://www.sat.gob.mx/TimbreFiscalDigital TimbreFiscalDigital.xsd" selloCFD="ll858RRUo3RHkdawp5Jy/TENtijth0TXEizBRwiCZhkanijbNH8Hh6C2XRk1wUsR&#xA;T0q+3HrO2bNgMS7cPr4p2ee+2N/6zVPzhjt0hfK8r3rF+VLArhGKQaBynlzMpL/A&#xA;up1Oc4fDjZA1MbtbZblLxFNG8/TeCJjQogo7+uYBMB4=&#xA;" FechaTimbrado="2011-03-06T20:40:10" UUID="ad662d33-6934-459c-a128-bdf0393e0f44" noCertificadoSAT="30001000000100000801" version="1.0" selloSAT="j2gGwF26lCgiMEj7IlVTDaQrAsOtVU7yO6idRZrSXYnarFQ5cbUE79WER4O8g+TZ&#xA;pYnyeOoH7DskvzeSMlCG67Tp/+Rx74CSTvzLtfDjEK6mmzKHylcWMn9SizIGWRDB&#xA;RrxOv5P2BPLIwTY1/HUQ7I46/eBzAuTLHsiDhsNJCMk=&#xA;" />
  </cfdi:Complemento>

con este codigo leo la informacion del xml que tambien adjunto
Código Delphi [-]
var
        elemisor : IXMLComprobante_Emisor;
begin
//
//  Cargamos el comprobante y comezanmos a cargar los datos que contieen
  elcomprobante := GetComprobante(XMLDocument1);
 Edit1.Text :=  elcomprobante.Version ;
 Edit2.Text := elcomprobante.Folio;
 Edit3.Text := elcomprobante.Serie;
 Edit4.Text := elcomprobante.Fecha;
 Memo1.Text := elcomprobante.Sello;
 Edit5.Text := elcomprobante.Total;
  // aqui no se como leer el complemento para pasarlo a unos edits y memos

yo creo que el problema es que no se han declarado los namespaces
pero no se como se declaran ni como leer un namespace distinto dentro
de otro
en este caso el complemento timbrefiscal
tiene el namespace <tfd:TimbreFiscalDigital

JXJ 10-02-2011 05:13:35

siguo sin entender como hacerle.

JXJ 11-02-2011 06:36:27

Cita:

Empezado por JXJ (Mensaje 390519)
siguo sin entender como hacerle.

Todavia no encuentro como leer el xml
quiero leer la informacion del timbre pero nada de nada..

tampoco tengo idea de como se escribe el XML para que tenga

Código Delphi [-]
 
    TimbreFiscalDigital xmlns:tfd="http://www.sat.gob.mx/TimbreFiscalDigital" xsi:schemaLocation="http://www.sat.gob.mx/TimbreFiscalDigital TimbreFiscalDigital.xsd" selloCFD="ll858RRUo3RHkdawp5Jy/TENtijth0TXEizBRwiCZhkanijbNH8Hh6C2XRk1wUsR
T0q+3HrO2bNgMS7cPr4p2ee+2N/6zVPzhjt0hfK8r3rF+VLArhGKQaBynlzMpL/A
up1Oc4fDjZA1MbtbZblLxFNG8/TeCJjQogo7+uYBMB4=
" FechaTimbrado="2011-03-06T20:40:10" UUID="ad662d33-6934-459c-a128-bdf0393e0f44" noCertificadoSAT="30001000000100000801" version="1.0" selloSAT="j2gGwF26lCgiMEj7IlVTDaQrAsOtVU7yO6idRZrSXYnarFQ5cbUE79WER4O8g+TZ
pYnyeOoH7DskvzeSMlCG6  7Tp/+Rx74CSTvzLtfDjEK6mmzKHylcWMn9SizIGWRDB
RrxOv5P2BPLIwTY1/HUQ7I46/eBzAuTLHsiDhsNJCMk=
" />
  

JXJ 11-02-2011 06:37:24

<B>Ayuda por favor.

JXJ 11-02-2011 15:39:09

segun yo con este codigo puedo accesar a los valores
del timbrefiscaldigital

Código Delphi [-]
 
var

AttrNode : XMLNode;
begin
    AttrNode:=    XMLDocument1.DocumentElement.ChildNodes.FindNode('TimbreFiscalDigital', XMLDocument1.DocumentElement.FindNamespaceURI('tfd'));
          Edit1.Text := Trim( AttrNode.ChildNodes.Nodes[0].Text);//aui error
end;
pero obtengo solo errores de acceso de memoria

JXJ 13-02-2011 05:58:13

alguna idea. algo ando perdido.

JXJ 18-02-2011 06:27:08

una duda enorme.

¿como se leen atributos en un xml?

ya perdi 3 dias buscando en internet algo.
pero no encuentro nada claro.

este es el archivo que quiero leer sus atributos. pero a cada rato me sale
error de proteccion de memoria.

Código:

<?xml version='1.0' encoding='UTF-8'?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<ns2:TimbreFiscalDigital xmlns:ns2="http://www.sat.gob.mx/TimbreFiscalDigital" xmlns:ns3="http://www.buzonfiscal.com/TimbradoCFDI/" xmlns:ns4="http://www.buzonfiscal.com/ns/xsd/bf/RequestTimbraCFDI" xmlns:ns5="http://www.sat.gob.mx/cfd/3" xmlns:ns6="http://www.buzonfiscal.com/ns/xsd/bf/TimbradoCFD" xmlns:ns7="http://www.sat.gob.mx/detallista" xmlns:ns8="http://www.sat.gob.mx/terceros" xmlns:ns9="http://www.sat.gob.mx/ecc" xmlns:ns10="http://www.sat.gob.mx/implocal" xmlns:ns11="http://www.sat.gob.mx/ecb" xmlns:ns12="http://www.buzonfiscal.com/ns/referenceID/v1" xmlns:ns13="http://new.webservice.namespace"
selloSAT="JzjF3ZTY8Uhply6ZRS1ewQyTeMrtDax8gjzKavbkJs4fevry+L4/vmLl+/j6cOk7xN0U/p0VyoPwEL+Y8ymre+8nquhV2YZxIV+hZfMz4TXSzVZsc53eIdhnw7Lzi5K+yNVCPknrOTZv14X6EW/W3gUgH/wV6UztcpbFkZkpoBc="
noCertificadoSAT="30001000000100000801"
 selloCFD="hJCk3eNMPB4a8klyUxNN/Esv/4OGTE8eCd7Ve+c3SmGqDdeH/4fr7yrjaGLnLwH1ABW4vniNN7c6pAXH1mwSS2Rv/3CGMp8x92zFJarsEW6CS+4k9fg8avF0Nt0XJkyyMun+yY1Zbghvqg3owVP10MmEJlu9GcxcOVqQh9l8j4E=" FechaTimbrado="2011-02-17T21:09:45" UUID="3f1722f5-63cf-4691-84d6-e2628d8777ba" version="1.0"/>
 </S:Body>
</S:Envelope>


JXJ 18-02-2011 07:07:56

ni idea de como se hace esto de los namespaces
y de leerlos. esta bien raro todo esto.

alguien que tenga alguna idea. ya tiro la toalla.

ifarias 18-02-2011 08:24:04

Cita:

Empezado por JXJ (Mensaje 391316)
ni idea de como se hace esto de los namespaces
y de leerlos. esta bien raro todo esto.

alguien que tenga alguna idea. ya tiro la toalla.

Recuerda que para manejar la estructura del XML debes usar la TXMLDocument, que se encuentra en la pestaña de Internet.

Otra forma es que construyas el XMLDataBindig a partir del archivio cfdv2.xsd o cfdv3.xsd según la necesidad.

Otra forma es manejarlo con las rutinas que nos proporcionaron, o que se muestran el http://www.clubdelphi.com/foros/showthread.php?t=66807, de este mismo foro, creo que debes epesar por ese punto.

Espero que esto te ayude.

JXJ 18-02-2011 17:52:35

hola ifarias
gracias por tu interes.

asi le he hecho.
con xmldocument
con xml databinding.

y da error de acceso de memoria o por que no se declaro el namespaces

no idea..

ifarias 19-02-2011 00:38:14

Cita:

Empezado por JXJ (Mensaje 391373)
hola ifarias
gracias por tu interes.

asi le he hecho.
con xmldocument
con xml databinding.

y da error de acceso de memoria o por que no se declaro el namespaces

no idea..

Espero que este ejemplo te ayude

Código Delphi [-]
var
  Nodo : IXMLNode;
...
  Nodo := XML1.DocumentElement;
  Nodo.Attributes['xmlns:xsi']  := 'http://www.w3.org/2001/XMLSchema-instance';
  Nodo.Attributes['xsi:schemaLocation'] := 'http://www.sat.gob.mx/cfd/2 http://www.sat.gob.mx/sitio_internet/cfd/2/cfdv2.xsd';
Saludos

Kalex 07-06-2013 20:38:09

Cita:

Empezado por JXJ (Mensaje 390690)
segun yo con este codigo puedo accesar a los valores
del timbrefiscaldigital

Código Delphi [-]
 
var

AttrNode : XMLNode;
begin
    AttrNode:=    XMLDocument1.DocumentElement.ChildNodes.FindNode('TimbreFiscalDigital', XMLDocument1.DocumentElement.FindNamespaceURI('tfd'));
          Edit1.Text := Trim( AttrNode.ChildNodes.Nodes[0].Text);//aui error
end;
pero obtengo solo errores de acceso de memoria


No se si ya encontraste la respuesta pero quiza a alguien mas le sirva
AttrNode : XMLNode;
begin
AttrNode:= XMLDocument1.DocumentElement.ChildNodes.FindNode('TimbreFiscalDigital', XMLDocument1.DocumentElement.FindNamespaceURI('tfd'));
------------> Edit1.Text := Trim( AttrNode.ChildNodes.Nodes[0].Text); <-------------------------------esta linea cambiala por
Edit1.Text := Trim( AttrNode.ChildNodes.Nodes['nombre del dato que quieres obtener ej UUID'].Text);
end;

Casimiro Notevi 07-06-2013 22:38:00

Recuerda poner los tags al código fuente, ejemplo:



Gracias :)

Waldo 21-02-2014 02:38:46

Hola tengo el mismo problema, ojala me puedan ayudar como lo solucionaron, ya que por medio de la unidad que me genero el xml data binding no me deja, saludos.

diasaric 11-06-2014 16:06:54

Tengo el mismo problema
 
Q tal buenos dias, solamente para saber si alguien ya pudo resolver este problema,
ya que es el mismo problema que tengo para accesar a los valores del timbre fiscal

gracias

email:diasaric@gmail.com

jourdan 07-03-2017 03:19:44

Intente usar este codigo:

Cita:

Empezado por Kalex (Mensaje 461944)
No se si ya encontraste la respuesta pero quiza a alguien mas le sirva
AttrNode : XMLNode;
begin
AttrNode:= XMLDocument1.DocumentElement.ChildNodes.FindNode('TimbreFiscalDigital', XMLDocument1.DocumentElement.FindNamespaceURI('tfd'));
------------> Edit1.Text := Trim( AttrNode.ChildNodes.Nodes[0].Text); <-------------------------------esta linea cambiala por
Edit1.Text := Trim( AttrNode.ChildNodes.Nodes['nombre del dato que quieres obtener ej UUID'].Text);
end;

Pero me manda un EAccess violation

Alguien pudo solucionar este problema?

Gracias y saludos


La franja horaria es GMT +2. Ahora son las 03:40:02.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi