teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

2

加筆しました。

2021/05/12 16:25

投稿

pegy
pegy

スコア245

title CHANGED
File without changes
body CHANGED
@@ -38,7 +38,7 @@
38
38
 
39
39
  ### 問題点
40
40
  ここに来て、いくつか解決すべき問題点に2つに気がつきました。
41
- 1. 実際にHTMLの構造は深いものもあり、上記の自前で用意したHTMLではどこまでchildNodesを追跡すれば良いのか全貌がわかっているので対応できるのですが、HTML構造を事前に知らない場合など、DOMを利用してどのような方法で**再帰的に走査**することが一般的なのでしょうか?
41
+ 1. 実際にHTMLの構造は深いものもあり、上記の自前で用意したHTMLではどこまでchildNodesを追跡すれば良いのか全貌がわかっているので対応できるのですが、HTML構造を事前に知らない場合など、DOMを利用してどのような方法で**再帰的に走査**することが一般的なのでしょうか? DomdocumentクラスのchildNodesプロパティで取得できる事は分かったのですが、NULLになるまで繰り返すようなやり方はしないと思うので、アドバイスをいただきたいです。
42
42
 
43
43
  2. また、構造に関連して`var_dump($key->textContent);//aabbaaa`について、テキストノードの中に要素ノードが混ざる場合でも、どの位置に要素ノードが入るかが示されず、textContentではaabbaaaを返してきます。このようなケースではDOMを利用して**どのようにテキストと要素ノードの順番**を解釈すれば良いのでしょうか?特にこの問題があるため↓#3のHTMLの再構築が非常に困難と感じています。
44
44
 

1

コードを修正しました。

2021/05/12 16:25

投稿

pegy
pegy

スコア245

title CHANGED
File without changes
body CHANGED
@@ -21,10 +21,15 @@
21
21
  var_dump($key->textContent);//aabbaaa
22
22
  echo "<br>";
23
23
  var_dump($key->tagName);
24
- if($key->tagName==="script"){//無害化}
24
+ if($key->tagName==="script"){
25
+     //無害化
26
+     }
25
27
  echo "<br>";
26
28
  var_dump($key->attributes);
27
-     if($key->tagName==="img" && substr($key->getAttribute('src'),0,4)==="java"){//無害化}
29
+     if($key->tagName==="img" && substr($key->getAttribute('src'),0,4)==="java")
30
+     {
31
+     //無害化
32
+     }
28
33
  echo "<br>";
29
34
  //再帰的な処理をして繰り返す
30
35
  var_dump($key->childNodes);