我一直在尝试创建一个在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/>
你知道为什么它可能不起作用吗?
答案 0 :(得分:0)
我相信这是因为你正在寻找save()而不是savexml()。你需要给save()文件名。
编辑:另外,如果我记得正确,你需要在每次保存后重新加载DOM,否则你只会影响未保存的DOM元素。但是我已经有一段时间了。我将仔细查看旧代码以进行仔细检查。
再次编辑:我一直在查看我的代码,看起来确实有必要。您可以一次完成所需的所有修改,但是如果需要在临时中查看结果,则必须使用saveXML()或save()生成它并将其读入新的XML对象。原始对象仅反映原始内容。我没有像我应该的那样在我的评论中正确地注意到它,但我的代码是以这样的方式完成的,它让我觉得我是对的。希望这会有所帮助。