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

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

  1. DOCTYPE 的存在导致$pbDoc->asXML()在开始标记之后添加一个不需要的元<head>标记:

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

    为什么?

  2. 出于某种原因,DOM 模块根本不为我缩进代码(尽管它对不同的文档(即 XML,而不是 XHTML)做得很好)。

谁能告诉我我可能错在哪里以及如何摆脱这些烦恼?

4

1 回答 1

1

1. 根据我能搜索和猜测的最佳结果,SimpleXML 自动将该标记生成到 HTML 中,因为 XML 以 <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 回答