如何仅使用PHP创建有效的XML树?
我在使用PHP创建XML树时遇到了很多麻烦。我已经有一些代码来显示我现在的位置:
$xml = new DOMDocument("1.0");
$verb = $xml->createElement ('verb');
$vtext = $xml->createTextNode($_POST['verb']);
$verb->appendChild($vtext);
$xml->appendChild ($verb);
$adverb = $xml->createElement ('adverb');
$advtext = $xml->createTextNode($_POST['adverb']);
$adverb->appendChild($advtext);
$xml->appendChild ($adverb);
$xml ->save("'".$_POST[verb]."'.xml") or die ("error creating file");
因此,有了这个和用户输入,它创建了一个文件,无论动词是什么。唯一的问题是,我不断得到错误消息,在动词下面有额外的内容。
我知道这是因为我没有添加根元素,但是如何添加这个根元素而不产生错误呢?几乎没有单独讨论PHP和XML的论坛,所以很难找到一个关于制作XML树的论坛。
这样怎么样?
$xml = new DOMDocument("1.0");
$root = $xml->createElement ('root');
$xml->appendChild($root);
$verb = $xml->createElement ('verb');
$vtext = $xml->createTextNode($_POST['verb']);
$verb->appendChild($vtext);
$root->appendChild ($verb);
$adverb = $xml->createElement ('adverb');
$advtext = $xml->createTextNode($_POST['adverb']);
$adverb->appendChild($advtext);
$root->appendChild ($adverb);
$xml ->save("'".$_POST[verb]."'.xml") or die ("error creating file");
这是我在stackoverflow和这项工作中发现的一个样本!希望这对你也有帮助!
<?php
/* create a dom document with encoding utf8 */
$domtree = new DOMDocument('1.0', 'UTF-8');
/* create the root element of the xml tree */
$xmlRoot = $domtree->createElement("xml");
/* append it to the document created */
$xmlRoot = $domtree->appendChild($xmlRoot);
$currentTrack = $domtree->createElement("track");
$currentTrack = $xmlRoot->appendChild($currentTrack);
/* you should enclose the following two lines in a cicle */
$currentTrack->appendChild($domtree->createElement('path','song1.mp3'));
$currentTrack->appendChild($domtree->createElement('title','title of song1.mp3'));
$currentTrack->appendChild($domtree->createElement('path','song2.mp3'));
$currentTrack->appendChild($domtree->createElement('title','title of song2.mp3'));
/* get the xml printed */
echo $domtree->saveXML();
?>
如何添加根元素而不产生错误?
对于DOMDocument
(一般来说,不仅仅是PHP扩展), documentElement
(通常也称为根元素)在技术上是 DOMDocument
对象的子节点。
您可以通过附加它来创建它(就像您已经做的那样(!)):
$xml = new DOMDocument("1.0");
$root = $xml->createElement ('root');
$xml->appendChild($root);
新的 documentElement
现在可以作为:
$xml->documentElement;
试试你自己的(在线演示):
$xml = new DOMDocument("1.0");
$xml->save('php://output'); // document is empty
输出只是XML声明,没有根元素:
然后添加根元素(这里命名为root):
$root = $xml->createElement ('root');
$xml->appendChild($root);
$xml->save('php://output'); // document has root-node now
文档现在有一个根节点,如输出所示:
<?xml version="1.0"?>
<root/>
$root
现在是 documentElement
并且可以将Children添加到它:
$root->appendChild($xml->createTextNode("'n "));
$root->appendChild($xml->createElement('hello', 'world'));
$root->appendChild($xml->createTextNode("'n "));
$root->appendChild($xml->createElement('answer', '42'));
$root->appendChild($xml->createTextNode("'n "));
$root->appendChild($xml->createElement('danger', 'danger'));
$root->appendChild($xml->createTextNode("'n"));
$xml->save('php://output');
输出如下:
<?xml version="1.0"?>
<root>
<hello>world</hello>
<answer>42</answer>
<danger>danger</danger>
</root>