无法使用domXML保存到XML文件

时间:2012-03-15 18:18:02

标签: php xml dom xpath

我一直在尝试创建一个在XML文件中添加新元素的方法,但由于某种原因,它不会修改元素,即使我使用saveXML打印正确的元素。

function fnDOMEditElementCond($product_id, $name, $weight, $category, $location) {

        if (!isset($product_id) || is_numeric($product_id)) {
          return false;
      }
        $obj = new helperClass();
        $xmlDoc = $obj->fetchFromXMLDocument('storage.xml');
        $xpath = new DOMXPath($xmlDoc);

        $result = $xpath->query(sprintf('/storagehouse/item[@id="%s"]', $product_id));
        if (!$result || $result->length !== 1) {
            throw new Exception(sprintf('Item with id "%s" does not exists or is not unique.', $product_id));
        }
        $item = $result->item(0);
       //Change the name element
        $xName = $xpath->query("./name", $item)->item(0);
        $xName->removeChild($xName);

//        //Change the name element
//        $xWeight = $xpath->query("./weight", $item)->item(0);
//        $xWeight->nodeValue = $weight;
//        
//        //Change the name element
//        $xLocation = $xpath->query("./location", $item)->item(0);
//        $xLocation->nodeValue = $category;
//        
//        //Change the name element
//        $xCategory = $xpath->query("./category", $item)->item(0);
//        $xCategory->nodeValue = $location;








        echo $xmlDoc->saveXML($item);
    }

}

此代码采用ID,并根据id修改信息,包含四个元素。

这是xml fil

storagehouse xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         xsi:noNamespaceSchemaLocation="schema.xsd">
    <item id="c7278e33ef0f4aff88da10dfeeaaae7a">
        <name>HDMI Cable 3m</name>
        <weight>0.5</weight>
        <category>Cables</category>
        <location>B3</location>
    </item>
    <item id="df799fb47bc1e13f3e1c8b04ebd16a96">
        <name>Dell U2410</name>
        <weight>2.5</weight>
        <category>Monitors</category>
        <location>C2</location>
    </item>
    <item id="53abbd89766ea8759b5ebe5bacd43f58">
        <name>HP Probook 1311</name>
        <weight>2.1</weight>
        <category>Notebooks</category>
        <location>A1</location>
    </item>
<storagehouse/>

你知道为什么它可能不起作用吗?

1 个答案:

答案 0 :(得分:0)

我相信这是因为你正在寻找save()而不是savexml()。你需要给save()文件名。

编辑:另外,如果我记得正确,你需要在每次保存后重新加载DOM,否则你只会影响未保存的DOM元素。但是我已经有一段时间了。我将仔细查看旧代码以进行仔细检查。

再次编辑:我一直在查看我的代码,看起来确实有必要。您可以一次完成所需的所有修改,但是如果需要在临时中查看结果,则必须使用saveXML()或save()生成它并将其读入新的XML对象。原始对象仅反映原始内容。我没有像我应该的那样在我的评论中正确地注意到它,但我的代码是以这样的方式完成的,它让我觉得我是对的。希望这会有所帮助。