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

时间:2013-06-02 05:04:38

标签: php xml domdocument

如何仅使用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树的论坛。

3 个答案:

答案 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>