2009-07-07 3 views
3

整形式のXHTMLドキュメントを出力するためにSimpleXMLを使用しようとしています。 私はこのようにそれをやっている:SimpleXMLを使用してXHTMLを出力する際に​​奇妙なものがあります

$pbDoc = new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
     <title>'.$myTitle.'</title> 
     <!-- Other headers --> 
    </head> 
</html>'); 

私は文書を作成した後、私は、出力はかなり読みやすいコードにしたいので、私はこのようなDOMモジュールを使用しています:、今

$dom = new DOMDocument(); 
$dom->loadXML($pbDoc->asXML()); 
$dom->formatOutput = true; 
echo $dom->saveXML(); 

私に迷惑をかける2つの奇妙なことがあります。可能であれば、この動作が正常かどうか、またそれを無効にする方法は不思議です。 DOCTYPEの

  1. 存在は右開き<head>タグの後に不要なmetaタグを追加する$pbDoc->asXML()が発生します。

    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
    

    なぜ?

  2. 何らかの理由で、DOMモジュールではコードがまったくインデントされません(XHTMLではなく、XML以外のドキュメントでも非常にうまくいきます)。

私はどこが間違っているのか、これらの迷惑を取り除く方法について教えてもらえますか?

+1

SimpleXMLが何らかの「HTMLモード」に切り替わっているようです。 – Boldewyn

+0

うん、私にはあまりにもそうだ。したがって、私はこのモードを防ぐことが可能かどうか疑問に思っています。 –

答えて

1

1.私は検索と推測することができる最高によると、SimpleXMLは、自動的にHTMLにそのタグを生成しますXMLは<HTML>

2で始まるため、この(http://pt2.php.net/manual/en/domdocument.loadxml.php#73933)を試してみたいことがあります。

3.最後に(それを取り除く方法)、出力されたXMLに対して簡単なstr_replace()を実行できると思います。したがって、あなたのコードは次のようになります:

<?php 

// Define the $pbDoc here 

$dom = new DOMDocument(); 
$dom->loadXML($pbDoc->asXML()); 
$dom->formatOutput = true; 
echo str_replace('<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />','',$dom->saveXML()); 

?> 
+0

私は#2を試したと思うし、それは役に立たなかった。おそらく、$ DOM-> loadXMLに文字列を渡す前にを削除したとしますが、わかりません。 とにかく(別の理由で)SimpleXMLで十分ではないようですので、代わりにDOMを使用するようにアプリケーションを書き直します。しかし、答えをありがとう! :) –

関連する問題