我一直在想方設法讓函數之間的simplexml和dom更新XML。我要問的原因是我編寫的代碼似乎很有用,但是沒有我必須聲明任何東西是全局的,而且我爲什麼會這樣做有點困惑。PHP SimpleXML使用函數之間的函數
例如,我有這個(簡化)代碼:
<?
foreach ($filenames as $filename) {
$xml = simplexml_load_file($filename);
updateXml($xml);
$xml->last_update = date('Y-m-d H:i:s');
$xml->asXML($filename);
}
function updateXml($xml) {
//...
if ($data = $xml->xpath('//data/info[product_id="' . $product_data['id'] . '"]')) {
$parent = $data[0]->xpath("parent::*");
$data = updateItem($parent[0], $product_data);
} else {
$product = addItem($xml->products, $product_data['id']);
$data = updateItem($product, $product_data);
}
}
function updateItem($parent, $product_data) {
$node = dom_import_simplexml($parent);
$dom = $node->ownerDocument;
$product = $dom->createElement('product');
$node->appendChild($product);
$item = $dom->createElement('id', $product_data['id']);
$product->appendChild($item);
$item = $dom->createElement('name', $product_data['name']);
$product->appendChild($item);
$item = $dom->createElement('url');
$product->appendChild($item);
$cdata = $dom->createCDATASection($product_data['url']);
$item->appendChild($cdata);
$item = $dom->createElement('price', $product_data['price']);
$product->appendChild($item);
return $node;
}
?>
能否請您幫助我瞭解如何將XML被職能部門之間更新,而無需將其申報爲全球性的?我知道這似乎很奇怪,詢問一些作品,但我需要讓我的頭周圍:-)
感謝
好有趣,謝謝你的回覆。所以,如果我只更新XML的一部分,它將適用於整個對象?另外,我是否需要在最終功能中重新調用$ node,是否需要? – 2010-02-15 21:37:53
如果更新'$ filename'內的xml的一部分,它將應用於該對象。取決於你的代碼的使用方式取決於何時返回變量。如果你想用'$ node'做一些事情,比如echo''updateItem'中的'$ node',它會'echo',因爲它被返回。 – 2010-02-15 21:44:03
好極了!所以,如果我只想使用updateItem來修改xml,使用asXML保存,我不需要從函數返回任何東西? – 2010-02-15 21:49:19