XML-форматирование Отступы Tags Matching - Linux

У меня есть файл XML, формат которого довольно сжат, и все теги склеиваются, как

<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>

Есть ли какая-либо команда в оболочке, которая может правильно форматировать теги. Если не отступать, только добавление тегов в их собственные строки также может решить мою проблему.

Ответ 1

xmllint --format <your-xml-file>

Пример

$ 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>
$

Ответ 2

tidy -xml -i -q

-xml - указать, что вход хорошо сформирован XML

-q - подавление несущественного вывода

-i - содержимое элемента отступа

tidy может работать с файлами и stdin/stdout

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

создаст

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