Так что у меня есть этот код, который генерируется в основном из ответов на вопросы, задаваемые здесь.
Я хочу добавить новый после последнего существующего.
это мой пример кода XML (с большим количеством меток):
<Folder>
<Placemark>
<name><![CDATA[scscsc]]></name>
<description><![CDATA[Description:ascasc<c,ascascasc<br>]]></description>
<styleUrl>#placemark-brown</styleUrl>
<ExtendedData>
</ExtendedData>
<Point>
<coordinates>24.069631625000056,-23.784080251008078,0</coordinates>
</Point>
</Placemark>
</Folder>
то, что я в настоящее время имею в php, это вставить новый перед последним, и я хочу его после последнего.
PHP-код:
// find the Folder tag
$root = $xmldoc->getElementsByTagName('Folder')->item(0);
// create the <placemark> tag
$placemark = $xmldoc->createElement('Placemark');
// add the placemark tag After the last element in the <Folder> tag
$root->insertBefore( $placemark, $root->lastChild );
Я не уверен, что мне не хватает того, что вы имеете в виду, но у меня все получилось?
Глядя на документы «Ссылочный узел. Если он не указан, newnode добавляется к дочерним элементам».
Так что, хотя он и добавлялся для меня в любом случае, может, просто пропустить второй параметр?
$root->insertBefore( $placemark );
(Сохраните ваш xml в file.xml)
$xmldoc = new DOMDocument();
$xmldoc->load("file.xml");
// find the Folder tag
$root = $xmldoc->getElementsByTagName('Folder')->item(0);
// create the <placemark> tag
$placemark = $xmldoc->createElement('Placemark');
// add the placemark tag After the last element in the <Folder> tag
$root->insertBefore( $placemark );
$xmldoc->save('file.xml', LIBXML_NOEMPTYTAG);
Какой вывод следующий
<?xml version="1.0"?>
<Folder>
<Placemark>
<name><![CDATA[scscsc]]></name>
<description><![CDATA[Description:ascasc<c,ascascasc<br>]]></description>
<styleUrl>#placemark-brown</styleUrl>
<ExtendedData>
</ExtendedData>
<Point>
<coordinates>24.069631625000056,-23.784080251008078,0</coordinates>
</Point>
</Placemark>
<Placemark></Placemark>
</Folder>
Других решений пока нет …