2

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

4

3 回答 3

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();
?>
于 2013-06-02T05:29:07.270 回答
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");
于 2013-06-02T05:07:44.273 回答
0

您将如何添加此根元素而不会产生错误?

对于 a DOMDocument(通常,不仅是 PHP 扩展),documentElement(通常也称为root element)在技术上是对象的子节点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/>

现在$rootdocumentElement现在,并且可以将孩子附加到它:

$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>
于 2013-06-03T09:43:55.673 回答