取消设置xml子项不起作用

时间:2018-01-28 15:15:10

标签: php xml simplexml

我有xml文件" flashcards.xml":

<flashcards>
 <category name="testCategory">
    <card front="A" back="B"/>
    <card front="C" back="D"/>
    <card front="E" back="F"/>
 </category>
</flashcards>

我尝试按给定属性删除类别&#34; name&#34;像这样在php:

<?php
  $xml = simplexml_load_file("flashcards.xml");
  if (isset($_POST['remCat'])) {
      $remCat = $_POST['remCat'];
      $path = 'category[@name="' . $remCat . "\"]";

      $allCategories = $xml->xpath($path);
      $toRemove = $allCategories[0];
      unset($xml->$toRemove);

      var_dump($xml->asxml());
  }
?>

此代码应加载文件,查找具有属性&#34; remCat&#34;的类别子代。并取消它。如果我打印出$toRemove其正确的节点,但var_dump($xml->asxml());打印未更改的文件。孩子不会被移除。

1 个答案:

答案 0 :(得分:1)

在您尝试使用unset时,在这种情况下使用$xml->$toRemove很困难。因此,您尝试使用XPath返回的SimpleXMLElement来删除原始文档中的元素。如果您想unset($xml->category[0]);但不想使用SimpleXMLElement,则可以使用。

您可以改用...

$allCategories = $xml->xpath($path);
echo $allCategories[0]->asXML().PHP_EOL;
$toRemove = $allCategories[0];
//unset($xml->$toRemove);
$dom=dom_import_simplexml($toRemove);
$dom->parentNode->removeChild($dom);

这使用了更强大的DOM api。