PHP簡單讀取XML


DOM

document object model,文檔對象模型,就是樹形結構

節點的分類

  1. 元素節點
  2. 屬性節點
  3. 值節點
  4. 注釋節點
  5. 根節點(document才是根節點)

生成XML文檔 xml的根節點為document節點

如果book下只有一個節點元素可以用此操作取得結點元素的值

 

/***********************************************************/

<?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; //格式化輸出 一般不用 這樣降低效率

$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 '寫入成功';

/***********************************************************/

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 '添加失敗';
}
}

/***********************************************************/

//刪除節點

<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');
}
?>

/***********************************************************/

遞歸遍歷xml

值節點的名稱是“#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);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM