2012-08-15 8 views
14

Mam plik XML, którego format jest bardzo skompresowane i wszystkie tagi są trzymać się razem jakXML formatowania akapitów pasujące do tagów - 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> 

Czy jest jakaś komenda w skorupkach, które można odpowiednio sformatować tagi. Jeśli nie wcięcie tylko dodanie znaczników do ich własnych linii może również rozwiązać mój problem.

Odpowiedz

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

przykład

$ 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

To nie działa na rzeczywistej pliku. Rozmiar mojego pliku XML wynosi około 583 MB. Opcja Format działa dla pliku o małym rozmiarze, ale kiedy zastosuję to do pliku rzeczywistego, Bash zabija operację. Każdy pomysł na formatowanie plików BIG, w kawałkach lub tak ... – HardCode

+0

583 MB? Może powinieneś zaimplementować swój własny program obsługi SAX do wcięcia. –

+0

I jak mogę to zrobić. Po prostu poprowadź mnie w tym – HardCode

10
tidy -xml -i -q 

-xml - określić wejście jest dobrze uformowane xml

-q - wstrzymywanie wyjściowy zbędne

-i - tiret zawartość elementu

schludny puszka pracować z plikami i stdin/stdout

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

będzie produkować

 <a> 
     <b>c</b> 
    </a>
Powiązane problemy