XML〜DOMから空白を取り除く@PHP
DOMにノードを追加してファイルに書き出すと空白が変なことになってしまうので、いろいろ試してみたが以下の2つを組み合わせるとうまく行った。でも、はじめにSimpleXMLとして読み込んでいるのに、再びsaveXMLでloadXMLってとっても二度手間。
$dom->preserveWhiteSpace = false; $dom->loadXML($dom->saveXML());
混合ノードのいらない空白は上で取り除いてくれるけど、テキストノードのいらない空白は取り除いてくれないので自力で取り除く。こんなことするなら混合ノードに入っているテキストノードの削除もこの関数の中でやってしまった方が良いと思うが、なんだか面倒くさそうなのでとりあえずこれでいく。
// テキストノードから空白文字を取り除く protected function removeWhiteSpace(& $dom,& $parentnode) { $childs = $parentnode->childNodes; $isOnlyText = true; // 子ノードがテキストノードだけかどうかをチェック foreach($childs as $node) { // テキストノードじゃないノードについては再帰的にチェック if($node->nodeType !== XML_TEXT_NODE) { $isOnlyText = false; $this->removeWhiteSpace($dom,$node); } } // テキストノードだけなら両端の空白を取り除いて入れ替え if($isOnlyText == true and $childs->length !== 0) { $value = trim($parentnode->firstChild->nodeValue); $textnode = $dom->createTextNode($value); $parentnode->replaceChild($textnode,$parentnode->firstChild); } }