首页 > 解决方案 > 使用 PHP 编辑 xml - 最后插入

问题描述

所以我有这段代码,主要是由这里提出的问题的答案生成的。我想在最后一个存在之后添加一个新的。这是我的 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 );

标签: phpxmlinsertafter

解决方案


我不确定我是否错过了你的意思,但它对我来说按预期工作吗?

查看文档“参考节点。如果未提供,则将 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>

推荐阅读