Php 使用DOMDocument以缩小的形式保存XML文件

Php 使用DOMDocument以缩小的形式保存XML文件,php,html,xml,Php,Html,Xml,我想通过以缩小的形式保存xml文件来节省空间 比如说 <body> <div> <p>hello</p> <div/> </div> </body> 试试看,您必须使用saveXML()而不是save() preserveWhiteSpace=false; $xml->formatOutput=false; $root=$xml->createElement('book'); $root

我想通过以缩小的形式保存xml文件来节省空间

比如说

<body>
  <div>
    <p>hello</p>
    <div/>
  </div>
</body>

试试看,您必须使用saveXML()而不是save()

preserveWhiteSpace=false;
$xml->formatOutput=false;
$root=$xml->createElement('book');
$root=$xml->appendChild($root);
$title=$xml->createElement('title');
$title=$root->appendChild($title);
$text=$xml->createTextNode(“这是\n标题”);
$text=$title->appendChild($text);
echo“保存所有文档:\n”;
$xml_content=$xml->saveXML();
echo$xml\u内容。“\n”;
$xml\u content=str\u replace(数组(“>\n”,“>\t”),“>”,trim($xml\u content,“\n”);
echo$xml\u内容。“\n”;
//将内容写回文件
$filename=“/tmp/xml\u minified.xml”;
文件内容($filename,$xml\u content);
?>

您已经在使用正确的选项
DOMDocument::$formatOutput
DOMDocument::$preserveWhiteSpace

格式输出
DOMDocument::$formatOutput
在保存时向XML DOM添加缩进空格节点。(默认情况下,它处于禁用状态。)

输出:

Not Formatted: 
<?xml version="1.0"?> 
<body><div><p>hello</p></div></body> 

Formatted: 
<?xml version="1.0"?> 
<body>
  <div>
    <p>hello</p>
  </div> 
</body>
输出:

<?xml version="1.0"?> 
<body><div><p>hello</p></div></body>

你好


这对我使用DOMDocument创建和保存文件没有任何帮助这还会从文档中的文本节点和属性中删除任何空白,这感觉有点危险。@iainn看起来您没有看到我在替换任何空格,而是替换数组(“\n”,“\t”)@iainn还替换\n&\t的代码,通过执行检查。为什么要将
preserveWhiteSpace
formatOutput
设置为false?你的评论甚至说我们想要一个好的输出,而这与我们想要的正好相反。原来的海报上还说问题昨天解决了。使用
save
saveXML
对输出也没有什么不同,只保存到一个文件而不是一个字符串。在您的示例中,
preserveWhiteSpace
formatOutput
应该解决这个问题:是的,formatOutput工作了,我做得不对谢谢
<?php

$xml = new DOMDocument('1.0');

$xml->preserveWhiteSpace = false; 
$xml->formatOutput = false;

$root = $xml->createElement('book');
$root = $xml->appendChild($root);

$title = $xml->createElement('title');
$title = $root->appendChild($title);

$text = $xml->createTextNode("This is the \n title");
$text = $title->appendChild($text);

echo "Saving all the document:\n";

$xml_content = $xml->saveXML();
echo $xml_content . "\n";

$xml_content = str_replace(array(">\n", ">\t"), '>', trim($xml_content, "\n"));

echo $xml_content . "\n";

// Write the contents back to the file
$filename = "/tmp/xml_minified.xml";
file_put_contents($filename, $xml_content);
?>
$document = new DOMDocument();
$body = $document->appendChild($document->createElement('body'));
$div = $body->appendChild($document->createElement('div'));
$div
  ->appendChild($document->createElement('p'))
  ->appendChild($document->createTextNode('hello'));

echo "Not Formatted:\n", $document->saveXML();

$document->formatOutput = TRUE;
echo "\nFormatted:\n", $document->saveXML();
Not Formatted: 
<?xml version="1.0"?> 
<body><div><p>hello</p></div></body> 

Formatted: 
<?xml version="1.0"?> 
<body>
  <div>
    <p>hello</p>
  </div> 
</body>
$xml = <<<'XML'
<?xml version="1.0"?> 
<body>
  <div>
    <p>hello</p>
  </div> 
</body>
XML;

$document = new DOMDocument();
$document->preserveWhiteSpace = FALSE;
$document->loadXML($xml);
echo $document->saveXML();
<?xml version="1.0"?> 
<body><div><p>hello</p></div></body>