我测试了一个如何使用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>
现在我有两个关于输出应该是什么样子的问题。
xml文件"中的第一行不应显示,即应隐藏
如何在下一行中显示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>