2012-08-15 16 views
14

que tiene un archivo XML cuyo formato es bastante comprimido y todas las etiquetas se pegan juntos comoXML el formato de sangría tag - Linux

<PersonalData><IndividualDetails><Title>Mr</Title><Gender>Male</Gender><FirstName>Hae</FirstName><Surname>JONES</Surname><Occupation>Banker</Occupation><DateofBirth>4/6/76</DateofBirth><LastKnownAddress></LastKnownAddress><LastKnownPostCode>00145</LastKnownPostCode><OtherNames></OtherNames></IndividualDetails><OccupationDetails><Company>SD Bank</Company><CompanyAddress>Sunset Boulevard NY</CompanyAddress><ContactNo>335698457</ContactNo></OccupationDetails></PersonalData> 

¿Hay algún comando en el shell que pueden formatear correctamente las etiquetas. Si no es sangría, solo agregar las etiquetas a sus propias líneas también puede resolver mi problema.

Respuesta

31
xmllint --format <your-xml-file> 

ejemplo

$ cat test.xml 
<a><b>c</b></a> 
$ xmllint --format test.xml 
<a> 
    <b>c</b> 
</a> 
$ xmllint --format test.xml > test.formatted.xml 
$ cat test.formatted.xml 
<a> 
    <b>c</b> 
</a> 
$ 
+1

Esto no está trabajando en el archivo real. El tamaño del archivo de mi XML es de aproximadamente 583 MB. La opción Formato funciona en un archivo de tamaño pequeño, pero cuando lo aplico en un archivo real, Bash Kills la operación. ¿Alguna idea para formatear archivos GRANDES, en pedazos o tan ... – HardCode

+0

583 MB? Tal vez deberías implementar tu propio manejador de SAX para la sangría. –

+0

Y cómo puedo hacer eso. Solo guíame en este – HardCode

10
tidy -xml -i -q 

-xml - especificar la entrada está bien formado XML

-q - suprimir la salida no esencial

-i - contenido del elemento guión

tidy can trabajar con archivos y stdin/stdout

echo '<a><b>c</b></a>' | tidy -xml -i -q 

producirá

 <a> 
     <b>c</b> 
    </a>