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

时间:2012-02-13 11:57:27

标签: php xml

我正在测试一个如何使用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>
    
  3. 是否可以获得所需的输出,如果可以,我该如何实现。

    由于

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

第一个问题: 这是我的帖子,其中列出了包含答案的所有可用线程:How do you exclude the XML prolog from output?

第二个问题: 我不知道任何输出文本节点的PHP函数。

你可以:

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

最后,您将在新行中使用与文本节点值相同的XML:

<node>
    some text data
</node>