Saltar al contenido

¿Cómo puedo agregar saltos de línea en un archivo XML desde la línea de comandos de Unix?

Solución:

Texto

Usar indentxml file.xml para ver, indentxml file.xml > new.xml Para editar.

Donde es indentxml

#!/usr/bin/perl
#
# Purpose: Read an XML file and indent it for ease of reading
# Author:  RedGrittyBrick 2011. 
# Licence: Creative Commons Attribution-ShareAlike 3.0 Unported License
#
use strict;
use warnings;

my $filename = $ARGV[0];
die "Usage: $0 filenamen" unless $filename;

open my $fh , '<', $filename
  or die "Can't read '$filename' because $!n";
my $xml="";
while (<$fh>) { $xml .= $_; }
close $fh;

$xml =~ s|>[ns]+<|><|gs;                       # remove superfluous whitespace
$xml =~ s|><|>n<|gs;                            # split line at consecutive tags

my $indent = 0;
for my $line (split /n/, $xml) {

  if ($line =~ m|^</|) { $indent--; }

  print '  'x$indent, $line, "n";

  if ($line =~ m|^<[^/?]|) { $indent++; }             # indent after <foo
  if ($line =~ m|^<[^/][^>]*>[^<]*</|) { $indent--; }  # but not <foo>..</foo>
  if ($line =~ m|^<[^/][^>]*/>|) { $indent--; }        # and not <foo/>

}

Analizador

Por supuesto, la respuesta canónica es utilizar un analizador XML adecuado.

# cat line.xml
<a><b>Bee</b><c>Sea</c><d><e>Eeeh!</e></d></a>

# perl -MXML::LibXML -e 'print XML::LibXML->new->parse_file("line.xml")->toString(1)'
<?xml version="1.0"?>
<a>
  <b>Bee</b>
  <c>Sea</c>
  <d>
    <e>Eeeh!</e>
  </d>
</a>

Utilidad

Pero tal vez lo más fácil sea

# xmllint --format line.xml
<?xml version="1.0"?>
<a>
  <b>Bee</b>
  <c>Sea</c>
  <d>
    <e>Eeeh!</e>
  </d>
</a>

No hay secuencia de escape, debe usar literalmente el carácter de nueva línea. Entonces, para esta entrada

$ cat /tmp/example 
<this is one tag><this is another tag><here again>

Tendrías que usar

$ sed -e 's_>_&
_g' /tmp/example

que produce

<this is one tag>
<this is another tag>
<here again>

Tenga en cuenta que la nueva línea debe escaparse (como se muestra arriba)

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *