【问题标题】:How to delete a node in XML如何删除 XML 中的节点
【发布时间】:2012-12-19 06:41:25
【问题描述】:

为什么我的代码无法删除位于我的asset.xml 中的元素

这是我在 php 文件中的 xml 代码:

<?php

if(isset($_POST["delete"])) {
        $node = $_GET["node"]; //get from form
        $xmldoc->load('asset.xml');
        $y= $xmldoc->getElementsByTagName("asset")[$node];
        $xmldoc.documentElement.removeChild($y);}
?>

我的 xml 文件

<?xml version="1.0" encoding="UTF-8"?>
<Assets>
  <asset>
    <AssetType>PROJECTOR</AssetType>
    <Product>DELL</Product>
    <Brand>DELL</Brand>
  </asset>
</Assets>

【问题讨论】:

  • $xmldoc.documentElement.removeChild($y); - 那是什么?!请帮我们一个忙,粘贴代码,而不是凭记忆输入。
  • 我已经粘贴了.. 代码假设变成什么样子?
  • 如果这是您的代码,PHP 会给您非常明显的迹象,表明有问题;你试过运行代码吗?您看到了什么错误?
  • 我使用统一服务器作为我的本地服务器。没有显示错误。但是,每次我点击按钮(name = 'delete')时,页面都会变成一个完全空白的页面

标签: php javascript xml


【解决方案1】:

你需要先保存文件试试

$xmldoc->save('asset.xml');

removeChild() 方法删除指定节点。
removeAttribute() 方法删除指定的属性。

【讨论】:

  • 我要删除,xml文件里面有几个
【解决方案2】:

您必须保存文件才能使更改持续存在

$xmldoc->save('asset.xml');

看到您发布的代码是实际代码

DOMDocument::getElementsByTagName 返回一个DOMNodeList 你必须通过DOMNodelist::item 访问元素

$y = $xmldoc->getElementsByTagName("asset")->item($node);//assuming $node is an integer < # of matched nodes

-&gt;用于访问php中的对象属性而不是.所以$xmldoc.documentElement.removeChild($y);应该是

$xmldoc->documentElement->removeChild($y);

或者更好

$y->parentNode->removeChild($y);

【讨论】:

  • 我已经更新了,结果我得到了一个完全空白的页面。