3

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 つあります。この動作が正常なのか、可能であれば無効にする方法を考えています。

  1. DOCTYPE が存在すると、開始タグ$pbDoc->asXML()の直後に不要なメタ タグが追加されます。<head>

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

    なんで?

  2. 何らかの理由で、DOM モジュールはコードをまったくインデントしません (ただし、XHTML ではなく XML である別のドキュメントでは非常にうまく機能します)。

私が間違っている可能性がある場所と、これらの煩わしさを取り除く方法について誰か教えてもらえますか?

4

1 に答える 1

1

1. 私が検索して推測できる限りでは、XML は <html> で始まるため、SimpleXML はそのタグを HTML に自動的に生成します。

2. これを試してみてください ( http://pt2.php.net/manual/en/domdocument.loadxml.php#73933 ):

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

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());

?>
于 2009-07-08T22:27:48.850 に答える