XML格式缩进标签匹配 - Linux

Har*_*ode 14 xml linux bash ubuntu xml-formatting

我有一个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>
Run Code Online (Sandbox Code Playgroud)

shell中是否有任何可以正确格式化标记的命令.如果没有缩进,只将标签添加到自己的行也可以解决我的问题.

Jin*_*won 31

xmllint --format <your-xml-file>
Run Code Online (Sandbox Code Playgroud)

$ 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>
$
Run Code Online (Sandbox Code Playgroud)

  • 使用`xmllint`方法要记住的一件事是它不会保留确切的原始文本.例如.`<a> </a>`将转换为`<a/>`.从技术上讲,这是正确的,但如果你不期待它,它可能会让你失望. (4认同)

Cyb*_*m0n 10

tidy -xml -i -q
Run Code Online (Sandbox Code Playgroud)

-xml - 指定输入结构良好的XML

-q - 抑制不重要的输出

-i - 缩进元素内容

整理可以使用文件和stdin/stdout

echo '<a><b>c</b></a>' | tidy -xml -i -q
Run Code Online (Sandbox Code Playgroud)

会产生

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