PHP簡單讀取XML

DOM

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

節點的分類node

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

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

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

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

遞歸遍歷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);

相關文章
相關標籤/搜索