使用SimpleXML输出HTML时的奇怪之处

时间:2009-07-07 14:49:15

标签: php 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();

现在,有两个奇怪的事情困扰我,我想知道这种行为是否正常以及如果可能的话如何禁用它。

  1. DOCTYPE的存在会导致$pbDoc->asXML()在打开<head>标记后立即添加不需要的元标记:

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

    为什么?

  2. 由于某种原因,DOM模块根本不会为我缩进代码(尽管它使用不同的文档(XML,而不是XHTML)非常好。)
  3. 有人可以告诉我可能出错的地方以及如何摆脱这些烦恼吗?

1 个答案:

答案 0 :(得分:1)

1。根据我可以搜索和猜测的最佳内容,SimpleXML会自动将该标记生成到HTML中,因为XML以&lt; html&gt;

开头

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

?>