我正在编写XML文件:
<?php
$xml2 = "currenttest";
$xml = new DOMDocument("1.0");
$root = $xml->createElement ('tv');
$xml->appendChild($root);
$root->appendChild($xml->createTextNode("\n"));
$root->appendChild($xml->createTextNode($xml2));
$root->appendChild($xml->createTextNode("\n"));
$xml->save('epg.xml');
XML:
<?xml version="1.0"?>
<tv>
test
</tv>
如果我更改文本并再次运行代码,则会删除旧内容。
我希望保留旧文本。
我们这样说:
<?xml version="1.0"?>
<tv>
currenttest...
newtest...
</tv>
我之前的方法是用以下内容编写XML:
file_put_contents($file, $xml2, FILE_APPEND | LOCK_EX);
FILE_APPEND | LOCK_EX,它帮助我以前的文本不会被删除
我在另一篇文章中找到了解决方案:
$doc->loadXML(file_get_contents('epg.xml'));
foreach($doc->getElementsByTagName('***') as $node)
{
}
但它如何适合我的代码呢?
答案 0 :(得分:0)
您无需做任何特别的事情,只需重新加载您的xml字符串并将新文本节点附加到根元素:
// your previous code (I only changed the variable names and added a default encoding)
$text = "currenttest";
$dom = new DOMDocument("1.0", "UTF-8");
$root = $dom->createElement('tv');
$dom->appendChild($root);
$root->appendChild($dom->createTextNode("\n"));
$root->appendChild($dom->createTextNode($text));
$root->appendChild($dom->createTextNode("\n"));
$xml = $dom->saveXML();
// let's add a new element
$newtext = 'newtext';
$dom = new DOMDocument;
$dom->loadXML($xml);
$root = $dom->documentElement; // conveniant way to target the root element
// but you can also write:
//$root = $dom->getElementsByTagName('tv')->item(0);
$root->appendChild($dom->createTextNode($newtext));
$newxml = $dom->saveXML();
echo $newxml;
关于$doc->loadXML(file_get_contents('epg.xml'));
,请注意您不需要使用file_get_contents
,因为DOMDocument
已经有两种方法:
DOMDocument::loadXML
从字符串加载xml内容。DOMDocument::load
直接从文件中加载xml内容。除了DOMNode::appendChild
在该元素的所有子节点之后向元素添加节点之外,还有DOMNode::insertBefore
在您选择的子节点之前向节点添加节点。
答案 1 :(得分:0)
我在上面尝试了代码,因为我正在覆盖我的数据,但是当我在我的应用程序中编码时,它没有工作,因为我试图在加载的 xml 中添加新的节点数据,您必须创建一个在里面添加数据的根。
$xml = new DOMDocument("1.0", "UTF-8");
//an tag root must be first thing to add
$root = $xml->createElement('root');
$xml->appendChild($root);
然后,在需要的时候添加数据
$xml = new DOMDocument("1.0", "UTF-8");
$xml->load($sFilepath);
$root = $xml->getElementsByTagName('root')->item(0);
您的结构必须如下所示:
<xml version="1.0" encoding="UTF-8">
<root>
</root>
上面的答案是完全正确的。此答案仅在有人难以理解时提供帮助。