如何仅使用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树的论坛。
答案 0 :(得分:1)
这样的事情怎么样?
$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");
答案 1 :(得分:1)
这是我在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();
?>
答案 2 :(得分:0)
如何在不创建错误的情况下添加此根元素?
对于DOMDocument
(通常,不仅仅是PHP扩展), documentElement
(通常也称为根元素)是从技术上讲,它是 DOMDocument
对象的子节点。
你可以通过附加它来创建它(就像你已经做的那样(!)):
$xml = new DOMDocument("1.0");
$root = $xml->createElement ('root');
$xml->appendChild($root);
新的 documentElement
现在可用:
$xml->documentElement;
自己尝试(online Demo):
$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
,可以将儿童附加到其中:
$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>