저는 simplexml과 dom이 함수 들간에 XML을 업데이트하는 방법에 대해 고민하고 있습니다. 내가 물어 본 이유는 내가 작성한 코드가 작동하는 것처럼 보이지만, 내가 글로벌이 아닌 것을 선언 할 필요가없고, 왜 이것이 그렇게하는지 혼란 스럽다. 예를 들어PHP SimpleXML 함수간에 사용하는 DOM
, 난이 (간체) 코드를 가지고 :
<?
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를 다시 실행해야합니까? 필요합니까? –
'$ filename' 안에서 XML의 한 부분을 업데이트하면 객체에 적용됩니다. 코드를 사용하는 방법에 따라 변수를 반환 할시기가 달라집니다. '$ node'를 사용하여'updateItem'에서'$ node'와 같은'echo'와 같은 것을하고 싶다면 반환되기 때문에'echo'됩니다. –
좋습니다. 그래서 난 그냥 xml, asXML을 사용하여 저장을 수정하려면 updateItem을 사용하려면, 내가 그 기능에서 아무것도 반환하지 않아도됩니까? –