質問編集履歴

3

追記

2018/08/30 00:54

投稿

helloman
helloman

スコア39

test CHANGED
File without changes
test CHANGED
@@ -12,7 +12,7 @@
12
12
 
13
13
  foreach ($divs as $div):
14
14
 
15
- if ($div->hasAttribute('class') && strstr($div->getAttribute('class'), 'target-class')) {
15
+ if ($div->hasAttribute('class') && preg_match('/target-class/i', $div->getAttribute('class'))) {
16
16
 
17
17
  ----
18
18
 

2

現在実行している方法を少し編集

2018/08/30 00:54

投稿

helloman
helloman

スコア39

test CHANGED
File without changes
test CHANGED
@@ -102,13 +102,19 @@
102
102
 
103
103
  foreach ($divs as $div):
104
104
 
105
- if ($div->hasAttribute('class') && strstr($div->getAttribute('class'), 'target-class')) {
105
+ if ($div->hasAttribute('class') && preg_match('/target-class/i', $div->getAttribute('class'))) {
106
106
 
107
107
 
108
108
 
109
109
  $new_p = $dom->createElement('p');
110
110
 
111
+ // 属性を全部コピー
112
+
113
+ foreach ($div->attributes as $attr) {
114
+
111
- $new_p->setAttribute('class', 'target-class');
115
+ $new_p->setAttribute($attr->nodeName, $attr->nodeValue);
116
+
117
+ }
112
118
 
113
119
  $new_p_content = $div->nodeValue;
114
120
 

1

現在実行している方法を追加しました

2018/08/30 00:53

投稿

helloman
helloman

スコア39

test CHANGED
File without changes
test CHANGED
@@ -1,4 +1,4 @@
1
- phpDOM操作に挑戦中です。
1
+ phpDOM操作に挑戦中です。
2
2
 
3
3
 
4
4
 
@@ -30,9 +30,27 @@
30
30
 
31
31
  <div class="target-class">hogehoge</div>
32
32
 
33
- ```
33
+ <div class="no">hogehoge</div>
34
34
 
35
+ <div class="target-class">hogehoge</div>
36
+
37
+ <div class="target-class">hogehoge</div>
38
+
39
+
40
+
41
+ <div class="no">hogehoge</div>
42
+
43
+ <div class="target-class">hogehoge</div>
44
+
45
+
46
+
47
+ <div class="no">hogehoge</div>
48
+
49
+ <div class="no">hogehoge</div>
50
+
51
+ <div class="target-class">hogehoge</div>
52
+
35
- です。
53
+ ```です。
36
54
 
37
55
 
38
56
 
@@ -42,8 +60,68 @@
42
60
 
43
61
  <p class="target-class"><span class="target-class-inner">hogehoge</span></p>
44
62
 
45
- ```
63
+ <div class="no">hogehoge</div>
46
64
 
65
+ <p class="target-class"><span class="target-class-inner">hogehoge</span></p>
66
+
67
+ <div class="target-class">hogehoge</div>
68
+
69
+
70
+
71
+ <div class="no">hogehoge</div>
72
+
73
+ <p class="target-class"><span class="target-class-inner">hogehoge</span></p>
74
+
75
+
76
+
77
+ <div class="no">hogehoge</div>
78
+
79
+ <div class="no">hogehoge</div>
80
+
81
+ <p class="target-class"><span class="target-class-inner">hogehoge</span></p>
82
+
83
+
84
+
47
- みたいな形にするにはどうしたらいいでしょうか?
85
+ ```みたいな形にするにはどうしたらいいでしょうか?
48
86
 
49
87
  単純にdivタグを別のタグ名にしたいのです。
88
+
89
+
90
+
91
+
92
+
93
+ ### 現在実行している方法
94
+
95
+ ```ここに言語を入力
96
+
97
+ $dom = new DOMDocument();
98
+
99
+ $dom->loadHTML($content);
100
+
101
+ $divs = $dom->getElementsByTagName('div');
102
+
103
+ foreach ($divs as $div):
104
+
105
+ if ($div->hasAttribute('class') && strstr($div->getAttribute('class'), 'target-class')) {
106
+
107
+
108
+
109
+ $new_p = $dom->createElement('p');
110
+
111
+ $new_p->setAttribute('class', 'target-class');
112
+
113
+ $new_p_content = $div->nodeValue;
114
+
115
+ $new_p->nodeValue = "<span class=\"target-class-inner\">{$new_p_content}</span>";
116
+
117
+ $div->parentNode->replaceChild($new_p, $div);
118
+
119
+
120
+
121
+ }
122
+
123
+ endforeach;
124
+
125
+ return mb_convert_encoding($dom->saveHTML(), 'UTF-8', 'HTML-ENTITIES');
126
+
127
+ ```