如何使用比根更深入的PHP DOM向XML添加新元素?

Fis*_*ers 3 php xml xpath dom

我在网上可以找到的所有这些例子都只涉及在文档根目录中向XML文件中添加内容,但我真的需要做更深入的事情.

我的XML文件很简单,我有:

<?xml v1 etc>
<channel>
<screenshots>
<item>
  <title>Image Title</title>
  <link>www.link.com/image.jpg</link>
</item>
</screenshots>
</channel>
Run Code Online (Sandbox Code Playgroud)

我想要做的就是添加新的"item"元素,每个元素都带有标题和链接.我知道我需要使用PHP DOM,但我对如何编码它感到困惑,因此它在"屏幕截图"中添加数据而不是覆盖整个文档.我怀疑我可能也需要使用XPath,但我不知道怎么做!

我从在线示例拼凑而来的代码看起来像这样(但我确定这是错的)

$newshottitle = "My new screenshot";
$newshotlink = "http://www.image.com/image.jpg";

$dom = newDomDocument;
$dom->formatOutput = true;
$dom->load("../xml/screenshots.xml");

$dom->getElementsByTagName("screenshots");
$t = $dom->createElement("item");
$t = $dom->createElement("title");
$t->appendChild($dom->createTextNode("$newshottitle"));

$l = $dom->createElement("link");
$l->appendChild($dom->createTextNode("$newshotlink"));

$dom->save("../xml/screenshots.xml");
Run Code Online (Sandbox Code Playgroud)

bob*_*nce 8

将内容添加到文档根目录的XML文件中,但我真的需要更深入地完成它.

您目前无法在任何地方添加内容!您可以使用文本创建<title>和<link>元素节点,然后不对它们执行任何操作.您应该将它们传递到<item>元素节点上的'appendChild'(您当前正在创建它,并且不会将其分配给变量而立即丢弃).

这是一个起点:

$screenshots= $dom->getElementsByTagName("screenshots")[0];

$title= $dom->createElement("title");
$title->appendChild($dom->createTextNode($newshottitle));
$item= $dom->createElement("item");
$item->appendChild($title);
$screenshots->appendChild($item);
Run Code Online (Sandbox Code Playgroud)