PHPのDOM操作について質問です。

つぎのような文字列(HTMLソースですが例のようにいきなりテキストから始まる場合もあります)をDOMオブジェクトとして扱い、特定class名の<img>タグを除去して、再度文字列に戻すような処理はどのように書けば良いでしょうか?

【例】クラス名"hoge"の<img>タグだけを除去したい
<入力>
texttexttexttexttext<img src="aaa.png" class="hoge" /><img src="bbb.png" class="foo" />texttexttexttexttext

<出力>
texttexttexttexttext<img src="bbb.png" class="foo" />texttexttexttexttext

簡単にするために<img>タグにしましたが、実際には<div class="hoge">texttexttext</div>の場合は、中のtexttexttextも合わせて除去したいです。
正規表現でも対応可能だとは思いますが、応用を考えてDOM操作で実現したいです。
また、クラス名なので、1つのタグに複数のクラス名が付けられていた場合に、該当タグにヒットするなら除去対象です。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2009/05/13 19:10:08
  • 終了:2009/05/14 17:22:57

回答(1件)

id:pahoo No.1

pahoo回答回数5960ベストアンサー獲得回数6332009/05/13 21:43:11

ポイント60pt

DOMを誤解されているようです。


DOMは、構造化されたテキストを扱うためのAPIです。実際には、HTML や XML を扱うための API として標準化が進められています。


一方、ご質問の例と出されている文字列は、HTML でも XML でもありません。一番外側に、ルートのタグがないので、構造化テキストとなっていません。

このような構造化されていないテキストを DOM で扱うことはできません。


構造化されていないテキストを扱うには、正規表現を適用する方が合理的です。


参考サイト

id:P-mako

ご指摘ありがとうございます。

「もしかしたら・・・」と思っていた点ではあったのですが、正しい理解を得ることができました。ありがとうございます。

では、少し質問を補強させていただきますと、

tempDom = document.createElement("div");

のようにルートとなるDOMを作成し、その中に上記のような文字列を入れてから処理するような場合、どうなりますでしょうか?

2009/05/14 10:32:06

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません