如何仅使用PHP创建有效的XML树根元素


How to create a valid XML tree root element in using only PHP?

如何仅使用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>