document object model,文檔對象模型,就是樹形結構php
節點的分類node
若是book下只有一個節點元素能夠用此操做取得結點元素的值數組
/***********************************************************/app
<?php // 將數組格式變換爲xml格式的文檔輸入
$array=array(array('name'=>'PHP','type'=>'腳本語言'),array('name'=>'XML','type'=>'標記語言'),array('name'=>'C#','type'=>'動態語言'));編碼
$doc=new DOMDocument('1.0','utf-8'); //設置版本號和字符編碼
$doc->formatOutput=true; //格式化輸出 通常不用 這樣下降效率spa
$books=$doc->createElement('books'); //建立一個元素節點
foreach($array as $value)
{
$book=$doc->createElement('book');//建立book節點
$name=$doc->createElement('name', $value['name']); //建立name節點,並賦值
$book->appendChild($book); //在元素的最後面添加子元素
$book->appendChild($name);
$book->setAttribute('type',$value['type']);
}
$doc->appendChild($books);
$doc->save('books.xml');
echo '寫入成功';orm
/***********************************************************/xml
if($_POST){//對已有的xml文檔進行添加操做
$doc=new DOMDocument();//不須要字符集和版本,由於已經存在
$doc->preserveWhiteSpace=false;//去掉空格元素的影響
$doc->formatOutput=true;//格式化輸出
$path='./books.xml';//將文件路徑變爲變量,之後好修改
$doc->load($path);//對xml文檔加載
$book=$doc->createElement('book');//建立book節點
$name=$doc->createElement('name',$_POST['name']);//建立name節點
$price=$doc->createElement('price',$_POST['price']);//建立price節點
$book->appendChild($name);//改變xml中包含的順序
$book->appendChild($price);
$book->setAttribute('type', $_POST['type']);//設置book節點的屬性
$books=$doc->documentElement;//建立books節點
$books->appendChild($book);//
if($doc->save($path))//保存xml文檔到硬盤
{
header('location:books_admin.php');
}
else
{
echo '添加失敗';
}
}對象
/***********************************************************/blog
//刪除節點
<input type="button" value="刪除" onclick="if(confirm('肯定要刪除嗎'))location.href='books_del.php?index=<?php echo $i?>'"
//傳入要刪除的下標 經過get方式
$doc=new DOMDocument();
$doc->preserveWhiteSpace=false;
$doc->formatOutput=true;
$doc->load('books.xml');
$index=$_GET['index'];
$book=$doc->getElementsByTagName('book')->item($index);
$book->parentNode->removeChild($book);
$doc->save('books.xml');
header('location:books_admin.php');
/***********************************************************/
修改
<input type="button" value="修改" onclick="location.href='books_modify.php?index=<?php echo $i?>'"
$index=$_GET['index'];
if(!is_numeric($index))//確認是否存在
die('非法操做');
$doc=new DOMDocument();
$doc->preserveWhiteSpace=false;
$path='./books.xml';
$doc->load($path);
$oldbook=$doc->getElementsByTagName('book')->item($index);
if($_POST){
$newbook=$doc->createElement('book');
$name=$doc->createElement('name',$_POST['name']);
$price=$doc->createElement('price',$_POST['price']);
$newbook->setAttribute('type', $_POST['type']);
$newbook->appendChild($name);
$newbook->appendChild($price);
$root=$doc->documentElement->replaceChild($newbook, $oldbook); //替換節點
$doc->save($path);
header('location:books_admin.php');
}
?>
/***********************************************************/
值節點的名稱是「#text」,根節點的名稱是「#document」
<?php
//遞歸XML文檔 適合xml通用操做,可是消耗資源
function getChilds($node){
echo "<ul>";
if($node->nodeType==3){
echo "<li>".$node->nodeValue."</li>"; //取出節點的值
}
else
{
echo "<li>".$node->nodeName."</li>"; //取出元素節點的名稱
if($node->attributes->length>0) //節點的屬性的個數大於0,表示此節點有屬性
{
foreach ($node->attributes as $attr){
echo "<li>".$attr->value."</li>"; //取出節點的值
}
}
foreach($node->childNodes as $child){ //便利循環子元素
getChilds($child); //遞歸點
}
}
echo "</ul>";
}
$doc=new DOMDocument();
$doc->preserveWhiteSpace=false; //不保護空格,就是導入XML的時候去掉空白字符
$doc->load('books.xml');
$root=$doc->documentElement; //得到最頂層元素
getChilds($root);