如何从xml文件中删除特定元素

时间:2012-08-28 12:06:41

标签: php xml

我想删除:

<newWord>
    <Heb>צהוב</Heb>
    <Eng>yellow</Eng>
 </newWord>

从:

<?xml version="1.0" encoding="UTF-8"?>
<xml>
  <newWord>
    <Heb>מילה ראשונה</Heb>
    <Eng>first word</Eng>
  </newWord>
  <newWord>
    <Heb>צהוב</Heb>
    <Eng>yellow</Eng>
  </newWord>
</xml>

所以输出将是:

<?xml version="1.0" encoding="UTF-8"?>
    <xml>
      <newWord>
        <Heb>מילה ראשונה</Heb>
        <Eng>first word</Eng>
      </newWord>
    </xml>

我尝试找到标记<newWord>并在此之后转到它的孩子<Eng>yellow</Eng> 如果我在$searchString = 'yellow';找到它,我应该转到它的一部分并删除元素<newWord>

我尝试通过以下代码执行此操作,但我不知道要去<newWord>的孩子。很多帮助。

这是我的代码:

<?php 
$del=true;
        if ($del==TRUE){
                $searchString = 'yellow';
                header('Content-type: text/xml; charset=utf-8');
                $xml = simplexml_load_file('./Dictionary_user.xml');



                foreach($xml->children() as $child){
                  if($child->getName() == "newWord") {
                      if($searchString == $child['Eng']) {
                        $dom->parentNode->removeChild($xml);
                    } else {
                        echo('no match found resualt');
                    }
                  }
                }

                $dom = new DOMDocument; 
                $dom->preserveWhiteSpace = FALSE;
                $dom->formatOutput = true;
                $dom->load('Dictionary_user.xml');

                $dom->save("Dictionary_user.xml");
                $dom->saveXML();
                header('Location: http://127.0.0.1/www/www1/ajax/ajax4/workwell/popus1.html');
}
?>

2 个答案:

答案 0 :(得分:0)

在这一行

if($searchString == $child['Eng']) {

您正在尝试比较子节点的主体,但它不会自动转换为字符串。它仍然是SimpleXMLElement object,因此比较失败。

尝试将其明确地转换为字符串以获取标记的正文。

if($searchString == (string)$child['Eng']) {

答案 1 :(得分:0)

试试这个:

$searchString = 'yellow';
$xml = simplexml_load_file('./Dictionary_user.xml');

foreach($xml->children() as $child){    
  if($child->getName() == "newWord") {
    if($child->Eng == $searchString){
        $dom = dom_import_simplexml($child);
        $dom->parentNode->removeChild($dom);
    }
  }
}

echo $xml->asXML();