在使用PHP生成的文件中隐藏XML声明


Hide XML declaration in files generated using PHP

我测试了一个如何使用PHP在浏览器中显示XML的简单示例,发现这个示例的效果很好

<?php
$xml = new DOMDocument("1.0");
$root = $xml->createElement("data");
$xml->appendChild($root); 
$id   = $xml->createElement("id");
$idText = $xml->createTextNode('1');
$id->appendChild($idText);
$title   = $xml->createElement("title");
$titleText = $xml->createTextNode('Valid');
$title->appendChild($titleText);
$book = $xml->createElement("book");
$book->appendChild($id);
$book->appendChild($title);
$root->appendChild($book);
$xml->formatOutput = true;
echo "<xmp>". $xml->saveXML() ."</xmp>";
$xml->save("mybooks.xml") or die("Error");
?>

它产生以下输出:

<?xml version="1.0"?>
<data>
  <book>
    <id>1</id>
    <title>Valid</title>
  </book>
</data>

现在我有两个关于输出应该是什么样子的问题。

  1. xml文件"中的第一行不应显示,即应隐藏

  2. 如何在下一行中显示TextNode。总的来说,我正在以这种方式分析的输出

    <data>
      <book>
        <id>1</id>
        <title>
          Valid
        </title>
      </book>
    </data>
    

这有可能得到想要的输出吗?如果有,我该如何实现。

感谢

要跳过XML声明,可以在根节点上使用saveXML的结果:

$xml_content = $xml->saveXML($root);
file_put_contents("mybooks.xml", $xml_content) or die("cannot save XML");

请注意,saveXML(node)的输出与saveXML()的输出不同。

第一个问题:这是我的文章,列出了所有可用的线程和答案:如何从输出中排除XMLprolog?

第二个问题:我不知道有哪个PHP函数能输出这样的文本节点。

你可以:

  • 使用DomDocument读取xml并将每个节点保存为字符串
  • 通过节点迭代
  • 检测文本节点并手动向xml字符串添加新行

最后,您将得到相同的XML,其中文本节点值在新行中:

<node>
    some text data
</node>