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');
Active := True;
Encoding := 'utf-8';
NodeIndentStr := #8;
EliminaNodosVacios(NodoDocumentElement);
[...]
end;
function EstaVacio(Nodo: IXMLNode) : boolean;
var
i : integer;
NodoHijo : IXMLNode;
Vacio : boolean;
begin
Result := True;
if Assigned(Nodo) do
begin
for i := 0 to Nodo.ChildNodes.Count - 1 do
begin
if Result then
Result := EstaVacio(Nodo.ChildNodes[i]);
end;
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
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;