保存前向 XML 添加节点

Posted

技术标签:

【中文标题】保存前向 XML 添加节点【英文标题】:Add Node to the XML Before Saving 【发布时间】:2018-08-31 10:53:29 【问题描述】:

如何在保存之前将 xml 节点 <TypeId>HDU5K3KDI23F</TypeId> 添加到 XML 变量的“顶部”节点。 我得到的 XML 数据来自 API 作为响应。 当我使用下面的代码时,确实保存了 xml 响应数据,但“Typeid”节点没有保存在该文件中。

XML 响应数据如下所示

        <GetCategories>
           <GetProduct>
               <Data>
                  <Id>87772873</Id>
                  <Name>Foods and Beverages</Name>
                  <Top>
                  <CategoryId>028392323</CategoryId>
                  <CategoryName>Categories</CategoryName> 
                  </Top>
               </Data>
           </GetProduct>
       </GetCategories>

代码

        $dom = new DOMDocument;
        $dom->loadXML($response->toXML());  
        $dom->preserveWhiteSpace = FALSE;

        $Xpath = new DOMXpath($dom);

        foreach ($Xpath->evaluate('/GetCategories/GetProduct/Data/Top[1]') as $data) 
         
            $type = $data->appendChild($dom->createElement('TypeId'));
            $type->appendChild($dom->createTextNode('HDU5K3KDI23F'));
         

           $dom->formatOutput = TRUE;
           $xmldata = $dom->saveXML();
           echo $xmldata;

        $myfile = file_put_contents('data.xml', $xmldata.php_EOL , FILE_APPEND | LOCK_EX);

【问题讨论】:

FILE_APPEND 将破坏 xml: 好:3v4l.org/Tds8t 坏:3v4l.org/SMOft Add node to a XML variable and Save it的可能重复 @Lawrence Cherone,实际上数据在循环中,所以它将文件附加到同一个文件中......我认为为什么这段代码不起作用......你做的方式我工作我也是,但对我来说,我有一个 ID 数组,我想将这些 ID 作为节点添加到 xml 并保存它,然后再次获取下一个 ID 并循环相同的内容并附加到同一个文件中。 不要附加它,因为 saveXML 包含会破坏它的标题。如果您循环然后加载文件,循环 GetProduct,添加 id,然后保存。 @Lawrence Cherone,哦,所以你是说让整个过程完成......然后加载xml文件并循环GetProducts,添加id,save.Right。?跨度> 【参考方案1】:

修改foreach中的代码如下: 首先创建具有值的元素并附加到您的数据中。

foreach ($Xpath->evaluate('/GetCategories/GetProduct/Data/Top[1]') as $data) 

    $type = $dom->createElement('TypeId', 'HDU5K3KDI23F');
    $data->appendChild($type);

【讨论】:

以上是关于保存前向 XML 添加节点的主要内容,如果未能解决你的问题,请参考以下文章

将节点添加到XML变量并保存

如何在文本中添加/插入 xml 节点

Qt通过Doc模式读取XML并设计一个增删改查方便的一个操作类

LINQ to XML - 更新节点并将其保存到 XML 文件

如何向xml中添加新节点

c# 在xml 跟节点下添加子节点