0

使用例は非常に単純です。基本的にHTMLドキュメントを含む文字列(!)のxpathステートメントを介してノードを見つけて削除したいと思います。

PHPでノードを見つける方法を知っています。基本的には次のようになります: 新しい DOMDocument LoadHTML (または LoadXML) を作成 新しい DOMXpath を作成してから、"query" または "evaluate" メソッドを作成します。終わり。

ただし、削除はトリッキーな部分です。いくつかのステートメントでノードを削除し (そして最後にparentNode->removechild)、saveHTML を使用して結果を文字列に保存するだけだと考える人もいるでしょう。残念ながら、この操作はほとんどの場合、元の HTML 文字列が「多すぎる」と変換されます。

だから私の質問は今です。saveHTML または saveXML を使用せずに、xpath->query ($query) によって返されるノードを削除するにはどうすればよいですか? そして、私自身のパーサーを書かずに。

それが十分に明確だったことを願っています:-)

これを見てくれてありがとう!

4

2 に答える 2

0

Emilさん、素早い回答ありがとうございます

はい、あなたは正しいです。これは、ノードを削除した方法であり、機能しました:

loadHTML/loadXML で html STRING を DOM に変換します -> xpath クエリでノードを識別します -> DOM からノードを削除します (説明したように) -> saveHTML/XML で DOM を html STRING に変換します

それは機能しますが、問題は、saveHTML の後の出力が (削除されたノードを除いて) 通常大きく異なることです。引数の配置や空白は気にしません。しかし、saveHTML の後、ブラウザでサイトが正しく表示されないことさえあります。ブラウザは、不完全な HTML コードをうまく処理できるのではないかと思います ...

saveHTML以外に試すことができる別の方法はありますか?

それは不可能かもしれません(または少なくともかなりの努力なしでは不可能です)?どう思いますか?

于 2010-06-19T09:24:45.100 に答える
0

まず、見つかったノードを下から上に削除してください。これは、親ノードの前に子ノードを確実に削除するためです。

第二に、「多くのものに変化する」とはどういう意味ですか? PHP の DOM XML は、ドキュメントを DOM ノード ツリーに解析します。次に、ツリーで作業を行います。完了すると、DOM ツリーが XML/HTML に変換されます。インデントが失われたり、引数の場所が変わったりする可能性があります。重要なことは、ドキュメントがまったく同じことを意味することです。つまり、DOM ツリーの正確な XML/HTML 表現です。

于 2010-06-19T07:49:53.313 に答える