PDA

View Full Version : سوال: حذف گره با Php



parsbin
جمعه 17 اردیبهشت 1389, 22:04 عصر
سلام
برای حذف یک گره در فایلهای xml با php چطوری باید عمل کرد؟
در خوندن و یا ویرایشش مشکلی ندارم.

صابر طهماسبی
شنبه 18 اردیبهشت 1389, 18:17 عصر
بستگی داره از چه روشی برای کار با XML استفاده می کنید مثلا SimpleXML یا DomDocument بنویسید تا در خدمت شما باشم انشاءالله.

parsbin
یک شنبه 19 اردیبهشت 1389, 09:42 صبح
فرقی نمیکنه.
راحت ترین مسیر برای حذف یک node یا Attr کدوم راهه.
برای خوندن و ویرایش از یک کلاس مجزا استفاده میکنم.

صابر طهماسبی
یک شنبه 19 اردیبهشت 1389, 13:27 عصر
فرقی نمیکنه.
راحت ترین مسیر برای حذف یک node یا Attr کدوم راهه.
برای خوندن و ویرایش از یک کلاس مجزا استفاده میکنم.

در حذف Node ها باید elemnt والد node را پیدا کنید و از removeChild استفاده کنید.
من خودم برای یادگیری XMLDom از سایت w3schools استفاده کردم(البته این سایت به طور کلی در مورد XMLDom نوشته و با جاوااسکریپت تست کرده)
در ایبوک های مختلف خوندم که هرچه کمتر از Attribute ها استفاده کنید بهتر است یه کلاس نوشتم برای کار با XML از اون استفاده می کنم فقط قسمتهایی رو که کار می برن و تکراری هستند در کلاس آوردم بقیه ی کارها مثل ویرایش گره ها و حذف را خارج از کلاس انجام میدم مثلا برای حذف یک گره با تابع evaluateXpath گره را پیدا می کنم و با parent آن و استفاده از تابع removeChild آن را حذف می کنم:
این هم کدش :


<?php
class XMLDatabase
{
private $XMLFile;
public $doc;
private $formatFile;
private $xpath;
//..............................
public function saveToFile()
{
$this->doc->save($this->XMLFile);
}
//..............................
public function __construct($xfile,$formatfile=1)
{
$this->doc=new DOMDocument("1.0","utf-8");
$this->XMLFile=$xfile;
$this->doc->load($this->XMLFile);
$this->doc->formatOutput=$formatfile;
$this->xpath=new DOMXPath($this->doc);
}
//..............................
public function evaluateXpath($exp)
{
return ($this->xpath->evaluate($exp));
}
//..............................
public function setValue($xpath,$value)
{
$cur=$this->evaluateXpath($xpath)->item(0);
$parent=$cur->parentNode;
$temp=$cur->cloneNode();
$temp->nodeValue=$value;
$parent->replaceChild($temp,$cur);
}
//..............................
public function setCDATAValue($xpath,$value)
{
$cur=$this->evaluateXpath($xpath)->item(0);
$parent=$cur->parentNode;
$temp=$cur->cloneNode();
$temp->value='';
$temp->appendChild($this->doc->createCDATASection($value));
$parent->replaceChild($temp,$cur);
}
}
//**********

?>


این برنامه را هم با همین کلاس نوشتم می توانید از ضمیمه دانلود کنید (حذف،ویرایش و اضافه کردن همش توش هست)امیدوارم کدش راهگشا باشه:
نام کاربری مدیر سایت : admin
رمز عبور : 123
برای ورود به بخش مدیر باید تایپ کنید admin.php