仅输出特定节点 PHP XML

Posted

技术标签:

【中文标题】仅输出特定节点 PHP XML【英文标题】:output only a specific node PHP XML 【发布时间】:2013-03-23 12:06:31 【问题描述】:

我试图保存一个特定的节点而不是完整的 xml 文件,但我得到了错误。

可捕获的致命错误:传递给 DOMDocument::saveXML() 的参数 1 必须是 DOMNode 的实例,在第 31 行的 php\corrdination.php 中给出的 DOMNodeList 的实例

我正在关注 doom 文档,但由于我不创建新元素并且仅从已创建的 xml 文件中读取,因此它不适用于创建新元素。

我的第 31 行是

$resultX = $xpath->query('/stickers/sticker[id="200"]/position/x'); 

当我试图只保存我写的更改的节点时。

echo $xml->saveXML($resultX);

关于如何做的任何建议? 这是我的整个 php 文件。

    $xml = new DOMDocument();
    $xml->formatOutput = TRUE;
    $xml->preserveWhiteSpace = FALSE; 
    $xml->load('../stickers.xml');

    $xpath = new DOMXPath($xml);
    $resultX = $xpath->query('/stickers/sticker[id="200"]/position/x'); 
    $resultX->item(0)->nodeValue = "150"; 
echo $xml->saveXML($resultX);

如果我只是echo $xml->saveXML(); 该查询有效,但正如我所说,它保存了整个节点结构。

XML 文件:

<stickers>
  <sticker>
    <position>
      <x>0</x>
    </position>
    <text>Hello world </text>
    <id>200</id>
  </sticker>
 </stickers>

谢谢

【问题讨论】:

错误提示您必须将DOMNode 传递给DOMDocument::saveXML()。所以也许您需要将saveXML($resultX) 更改为saveXML($resultX-&gt;item(0)) 做到了,你应该把它写成答案,这样我就可以接受了:) 谢谢我的朋友 【参考方案1】:

错误提示您必须将DOMNode 传递给DOMDocument::saveXML()。所以你需要改变这一行:

echo $xml->saveXML($resultX);

到这里:

echo $xml->saveXML($resultX->item(0));

【讨论】:

以上是关于仅输出特定节点 PHP XML的主要内容,如果未能解决你的问题,请参考以下文章

模式不输出预期节点数据的命名模板

使用php替换xml中的特定节点值

Apply-Template 仅适用于 ID 基于父子节点列表的节点

php解析xml,并将xml转换为层级数组

PHP - 在php中删除具有特定属性的子项[重复]

我用python写了段删除xml节点的程序,结果输出到另一个xml文件中,怎么保证输出后的各节点的格式不变啊?