Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Go Back   Foros Club Delphi > Principal > Delphi para la web
Register FAQ Members List Calendar Guía de estilo Today's Posts

Colaboración Paypal con ClubDelphi

Reply
 
Thread Tools Search this Thread Display Modes
  #1  
Old 09/07/2025
seccion_31's Avatar
seccion_31 seccion_31 is offline
Miembro
 
Join Date: Jan 2017
Posts: 472
Poder: 10
seccion_31 Va por buen camino
Eliminar nodos vacios de un XML

llevo una vida buscando como eliminar nodos vacíos de un archivo XML.

Tanto los nodos individuales que no tengan valores

Como una vez eliminados esos nodos individuales, los superiores que hayan quedado vacíos (o ya lo estuvieran) se eliminen también.

Es decir que al final en el XML solo queden nodos de cualquier nivel con valores,

Espero haberme explicado, y a ver si alguien puede darme una mano con esto !

(estoy probabando ahora un ultimo codigo a ver si me funciona)

saludos !

Last edited by seccion_31 : 09/07/2025 at 07:38.
Reply With Quote
  #2  
Old 09/07/2025
duilioisola's Avatar
[duilioisola] duilioisola is offline
Miembro Premium
 
Join Date: Aug 2007
Location: Barcelona, España
Posts: 1,806
Poder: 22
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Creo que podría hacerse con algo así:
no lo he probado

Código Delphi [-]
begin
  XMLDoc := TXMLDocument.Create(Self);
  try
     with XMLDoc do
     begin
        XML.LoadFromFile('ejemplo.xml');

        // Se activa para poder utilizar el componente
        Active := True;
        Encoding := 'utf-8';
        // Caracter para indentar el fichero XML
        NodeIndentStr := #8;

        // Elimino nodos vacios
        EliminaNodosVacios(NodoDocumentElement);
  [...]    
end;

function EstaVacio(Nodo: IXMLNode) : boolean;
var
  i : integer;
  NodoHijo : IXMLNode;
  Vacio : boolean;
begin
  /// Veo si el nodo tiene hijos vacios o si tiene contenido vacio

  Result := True;
  
  if Assigned(Nodo) do
  begin
     // Recorro hijos mirando si esta vacio
     for i := 0 to Nodo.ChildNodes.Count - 1 do
     begin
        if Result then
           Result := EstaVacio(Nodo.ChildNodes[i]);
     end;
     
     // Si no quedan hijos miro si tiene contenido
     if (not Nodo.HasChildNodes) then
     begin
       if (Nodo.Text <> '') then
          Vacio := False;
     end;
  end;
end;

procedure EliminarNodosVacios(Nodo: IXMLNode) : boolean;
var
  i : integer;
begin
  if Assigned(Nodo) do
  begin
     // Recorro hijos de atras hacia adelante, borrando los vacios
     for i := Nodo.ChildNodes.Count - 1 downto 0 do
     begin
        if EstaVacio(Nodo.ChildNodes[i]) then
           Nodo.Remove(i)
        else
          EliminarNodosVacios(Nodo.ChildNodes[i]);
     end;
  end;
end;
Reply With Quote
  #3  
Old 17/10/2025
seccion_31's Avatar
seccion_31 seccion_31 is offline
Miembro
 
Join Date: Jan 2017
Posts: 472
Poder: 10
seccion_31 Va por buen camino
Smile

Muchas gracias

Al final ya conseguí hacerlo y funciona en una unidad que convierte un record en XML para generar archivos facturae.
Reply With Quote
Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
IBExpress, excepción con registros vacíos pescriba Conexión con bases de datos 3 12/07/2011 11:22
Comprobar campos vacios o con espacios... Greco Varios 4 21/09/2007 03:57
DateTime con vacios CamiloU OOP 4 12/01/2006 12:37
no ingresar vacios o nulos.. pzala Varios 5 30/08/2005 21:40
consultar campos vacios noe SQL 1 21/03/2005 17:35


All times are GMT +2. The time now is 10:08.


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