4

私はすべて一緒に押しつぶされたhtmlを出力しており、適切なインデントを持つように変換したいと考えています。私はこれに xmllint を使用しようとしましたが、喜びはありません。たとえば、これが file.html にある場合:

<table><tr><td><b>Foo</b></td></tr></table>
<table><tr><td>Bar</td></tr></table>

私は得る:

$ xmllint --format file.html
file.html:2: parser error : Extra content at the end of the document
<table><tr><td>Bar</td></tr></table>
^
<<< exit status [1] >>>

ただし、file.html にこれらの行のいずれかが含まれている場合は、正常に動作します (2 行目を削除します)。

$ xmllint --format file.html
<?xml version="1.0"?>
<table>
  <tr>
    <td>
      <b>Foo</b>
    </td>
  </tr>
</table>

オプションを含めると、--htmlエラーなしで実行される可能性が高くなりますが、インデントされません。

助言がありますか?これに使用できる他の (*nix) ツールはありますか? ありがとう ...

4

4 に答える 4

4

ユーザー4M01が提案したように:コマンドラインで、パイプにHTML tidyへの呼び出しを追加します。

xmllintからの HTML 出力は修復されます。tidy は、HTML フラグメントの周りに適切な ... をラップします。

xmllint --xpath "//tr[6]/td[7]" --html - | tidy -q
于 2013-01-03T15:15:54.710 に答える
4

tidy -i構成値を設定しindent: autoます。auto の代わりに に設定するとyes、一貫してより良いインデント スタイルが得られます。

tidy --indent yes 
于 2013-04-05T12:20:03.227 に答える
2

これは、あなたが提供した HTML にルート タグがないため、無効な XML になっているためだと思います。

body タグを追加して、xmllint を再度実行してみてください。

<body><table><tr><td><b>Foo</b></td></tr></table>
<table><tr><td>Bar</td></tr></table></body>
于 2012-02-13T15:15:14.607 に答える
1

HTML Tidyを試しましたか? これに関する詳細情報は、W3 & sourceforgeで入手できます。GuiTidyとして知られる GUI ツールも利用できます。このツールは優れており、適切なインデントに役立つだけでなく、html コードの検証にも役立ちます。

この助けを願っています

于 2012-02-14T18:21:54.027 に答える