5

次のようなhtmlコンテンツがあります

<body>Hello world</div><div>New day</div></body>

この HTML スニペットを解析して、Hello の前に開始 div タグを追加したいと思います。私が従うことができるアプローチは何ですか?HTMLCLeanerを使用しようとしましたが、役に立ちませんでした。基本的にこれが意味することは、開始 div タグと一致しない終了 div タグを見つけて追加することです。

4

7 に答える 7

2

Java を使用している場合は、 Jsoupを使用してみてください。何かのようなもの

Jsoup.clean("<body><div>Hello world</div><div>New day</div></body>", Whitelist.relaxed());

これにより、適切な出力文字列が得られます。

アップデート

Jsoup.parse(html)whichを使用して、すべてのおよびタグも含む固定の html を取得するためにDocument呼び出すことができます。html に対して次の出力が得られます。toString()htmlbody

   <html>
    <head></head>
    <body>
      <div>
        Hello world
      </div
      <div>
        New day
      </div>
    </body>
   </html>

あなたが言ったように、ほとんどのパーサーは終了タグを修正しますが、開始タグは修正しません。間違った終了タグの直前を除いて開始タグを開始する場所を決定できず、終了直前に開始タグを追加しても意味がないためです。鬼ごっこ。

以下のTrevor Huttoの提案(スタックベースのアプローチ)のように、独自のロジックを実装する必要があるかもしれませんが、要件によっては独自の複雑さがあります。

于 2014-03-07T20:54:29.947 に答える
1

John Resig のHTML パーサーは、これをうまく処理します。少し古いですが、私のユースケースの大部分ではまだ機能しています。

編集:実際には、終了タグではなく、欠落している終了タグのみを修正するようです...ただし、いくつかの調整により、後者を実行できる場合があります。

于 2014-03-07T21:02:28.913 に答える
0

True/False を返す代わりに、代わりにタグを修正することを除いて、括弧のバランスで使用されるのと同じ手法を使用できます。私はこれを作業プロジェクトで一度行いました:

括弧のバランスをとるための再帰的な方法 [python]

トレバーが説明していることは、私が説明していることと同じです (括弧のバランスで使用)。

于 2014-03-07T20:45:42.550 に答える
0
<body>
<div>Hello world</div>
<div>New day</div>
</body>

hello world の前に div を追加することも、hello world の後に終了 div を削除することもできます。Hello world 新しい日

于 2014-03-20T10:52:23.057 に答える
-2

HTMLCLeaner やツールは必要ありません。html を操作する必要がある場合は、すべてのタグ <'something'> が a で閉じていることを覚えておくか、単純な <'something'/> を使用して要約するだけです。

于 2014-03-07T20:41:36.203 に答える