Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Proyecto SIF/Veri*Factu/Ley Antifraude > Registros de Facturacion y Eventos (XML)
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-03-2025
Avatar de GustavoCruz
GustavoCruz GustavoCruz is offline
Miembro
 
Registrado: jul 2006
Ubicación: Sampués Sucre (Colombia)
Posts: 296
Poder: 19
GustavoCruz Va por buen camino
Leer nodo de un xml

Hola amigos del foro, realmente no sabía dónde ubicar la pregunta.

Tengo el xml de una factura electrónica y necesito poder leer y modificar un dato.
<AdditionalInformation>
<Name>CODIGO_PRESTADOR</Name>
<Value>1</Value>
</AdditionalInformation>

del xml modificar <Value>1</Value> siempre y cuando encuentre <Name>CODIGO_PRESTADOR</Name>

Adjunto les dejo el archivo.

Les agradezco toda la ayuda que me puedan brindar

Gracias
Archivos Adjuntos
Tipo de Archivo: zip FE478394.zip (9,7 KB, 6 visitas)
Responder Con Cita
  #2  
Antiguo 17-03-2025
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.874
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
En los foros puedes encontrar mucha información al respecto.
Busca sobre la clase TXMLDocument.

En la case TXMLDocument, tienes métodos de LoadFromFile y SaveToFile.

Puedes cargar el fichero XML. Navegar por los nodos (ChildNodes,...) modificar los valores y volverlo a guardar.

Revisa estos hilos, aunque si buscas encontrarás más:
https://www.clubdelphi.com/foros/showthread.php?t=37223
https://www.clubdelphi.com/foros/showthread.php?t=89834
https://www.clubdelphi.com/foros/showthread.php?t=96144
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 17-03-2025
Avatar de Osorio
Osorio Osorio is offline
Miembro
 
Registrado: may 2003
Ubicación: Colombia
Posts: 252
Poder: 23
Osorio Va por buen camino
Recientemente hice esta función que recorre un XML y obtengo el valor que tiene en los nodos que tienen un nombre especifico. Puede ser un punto de partida.

Código Delphi [-]

function TDataModulo.XMLExtraerNodo(const XMLPar: widestring; const PNodo: String): TStringList;
var
      XMLDoc: IXMLDocument;
      Lista: TStringList;
      procedure AddNodes(ParentNode: TTreeNode; XMLNode: IXMLNode);
      var
        ChildNode: IXMLNode;
        TreeNode: TTreeNode;
      begin
        if (XMLNode.IsTextElement) then
          if XMLNode.NodeName = PNodo then
              Lista.Add(XMLNode.Text);
        ChildNode := XMLNode.ChildNodes.First;
        while ChildNode <> nil do
        begin
          AddNodes(TreeNode, ChildNode);
          ChildNode := ChildNode.NextSibling;
        end;
      end;
begin
  try
    lista:= TStringList.Create;
    Lista.Clear;
    XMLDoc := LoadXMLData(XMLPar);
    if Assigned(XMLDoc.DocumentElement) then
      AddNodes(nil, XMLDoc.DocumentElement);
  finally
    Result:= lista;
  end;
end;



Teniendo en cuenta que el XML es un texto (String) tambien se pueden hacer reemplazos de texto usando comodines.


Código Delphi [-]
    
MyXML := StringReplace(MyXML,'#COMODINUSUARIO',WideString(XMLUser), [rfReplaceAll, rfIgnoreCase]);

Saludos,
Responder Con Cita
  #4  
Antiguo 19-03-2025
Avatar de GustavoCruz
GustavoCruz GustavoCruz is offline
Miembro
 
Registrado: jul 2006
Ubicación: Sampués Sucre (Colombia)
Posts: 296
Poder: 19
GustavoCruz Va por buen camino
Hola buenos días desde Colombia, gracias por sus respuestas. efectivamente he visto ejemplos sobre TXMLDocument. que funcionan perfectamente en otros XML, pero para el caso específico del esquema de la factura que les adjunté no funcionan; por ello lo envié

Gracias por el tiempo dedicado
Responder Con Cita
  #5  
Antiguo 19-03-2025
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.874
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
No me había dado cuenta de que el nodo que has puesto al inicio no está dentro del XML directamente.

Código:
<AdditionalInformation>
  <Name>CODIGO_PRESTADOR</Name>
  <Value>1</Value>
</AdditionalInformation>
En realidad esa parte que has puesto, está dentro de un bloque del XML marcado con CDATA.
Código:
...
<cbc:Description><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
                                          <Invoice xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2" xmlns:...
...
<Name>CODIGO_PRESTADOR</Name>
...
...
Es decir, tienes un XML general, con un nodo <cbc:escription> que dentro tiene un elemento CDATA, y que ese elemento CDATA es otro XML.
El problema es que un elemento CDATA, según su definición:

"En XML, una sección CDATA (Character Data) es utilizada para incluir contenido que contiene caracteres especiales sin que se interpreten como marcado XML por el analizador. "

Es decir, que el analizador, de por si, no va a evaluar ese XML que está dentro del CDATA.
Seguramente (no lo he probado), cuando llegues al elemento CDATA, deberás coger ese texto, crear un nuevo TXMLDocument, meter el texto dentro y "parsearlo" de nuevo.
Y ahora sí, si "parseas" ese segundo XML sí te encontrará el elemento: <Name>CODIGO_PRESTADOR</Name>
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #6  
Antiguo 19-03-2025
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.874
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
No me había dado cuenta de que el nodo que has puesto al inicio no está dentro del XML directamente.

Código:
<AdditionalInformation>
  <Name>CODIGO_PRESTADOR</Name>
  <Value>1</Value>
</AdditionalInformation>
En realidad esa parte que has puesto, está dentro de un bloque del XML marcado con CDATA.
Código:
...
<cbc:Description><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
                                          <Invoice xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2" xmlns:
...
Es decir, tienes un XML general, con un nodo <cbc_dospuntos_Description> que dentro tiene un elemento CDATA, y que ese elemento CDATA es otro XML.
El problema es que un elemento CDATA, según su definición:

"En XML, una sección CDATA (Character Data) es utilizada para incluir contenido que contiene caracteres especiales sin que se interpreten como marcado XML por el analizador. "

Es decir, que el analizador, de por si, no va a evaluar ese XML que está dentro del CDATA.
Seguramente (no lo he probado), cuando llegues al elemento CDATA, deberás coger ese texto, crear un nuevo TXMLDocument, meter el texto dentro y "parsearlo" de nuevo.
Y ahora sí, si "parseas" ese segundo XML sí te encontrará el elemento: <Name>CODIGO_PRESTADOR</Name>
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Leer Xml con TXMLDocument (delphi 11) no avanza de nodo IVAND Varios 5 09-03-2023 03:12:31
leer nodo tfd de un cfdi xml jourdan Varios 18 28-08-2018 22:04:12
Como leer nodo de archivo xml con Python usando minidom jourdan Python 3 09-02-2018 21:23:16
C++Builder 6 CFDI Mexico ¿Como agregar nodo dentro de otro nodo como hijo? JXJ C++ Builder 0 10-03-2016 03:51:01
Consulta - TP Arboles- "Para cada nodo de un arbol Indique nombre del nodo padre" velapuerca88 Varios 5 08-06-2012 17:35:33


La franja horaria es GMT +2. Ahora son las 21:27:14.


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