为了账号安全,请及时绑定邮箱和手机立即绑定

请问一下PHP SimpleXML怎么-删除xpath节点

请问一下PHP SimpleXML怎么-删除xpath节点

PHP
白衣非少年 2020-01-06 08:00:45
我对如何删除可以通过xpath搜索找到的东西的父节点有些困惑:$xml = simplexml_load_file($filename);$data = $xml->xpath('//items/info[item_id="' . $item_id . '"]');$parent = $data[0]->xpath("parent::*");unset($parent);因此,它找到了项目ID,那里没有问题-但是未设置的项目并没有摆脱这个<items>节点。我要做的就是删除<items>...</items>此产品的。显然,<items>xml文件中有大量节点,因此它不能unset($xml->data->items)删除所有内容。任何想法表示赞赏:-)
查看完整描述

3 回答

?
狐的传说

TA贡献1804条经验 获得超3个赞

<?php

$xml = new SimpleXMLElement('<a><b/></a>');

unset($xml->b);

echo $xml->asxml();

由于调用了__unset()方法(或模块代码中的等效方法),因此可以按预期工作(从文档中删除<b />元素)。

但是,当您调用unset($parent);它时,它只会删除存储在$ parent中的对象引用,但不会影响对象本身或$ xml中存储的文档。为此,我将恢复为DOMDocument。


<?php

$doc = new DOMDOcument;

$doc->loadxml('<foo>

  <items>

    <info>

      <item_id>123</item_id>

    </info>

  </items>

  <items>

    <info>

      <item_id>456</item_id>

    </info>

  </items>

  <items>

    <info>

      <item_id>789</item_id>

    </info>

  </items>

</foo>');

$item_id = 456;


$xpath = new DOMXpath($doc);

foreach($xpath->query('//items[info/item_id="' . $item_id . '"]') as $node) {

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

}

echo $doc->savexml();

版画


<?xml version="1.0"?>

<foo>

  <items>

    <info>

      <item_id>123</item_id>

    </info>

  </items>


  <items>

    <info>

      <item_id>789</item_id>

    </info>

  </items>

</foo>



查看完整回答
反对 回复 2020-01-07
  • 3 回答
  • 0 关注
  • 311 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信