前言:雖然xml的格式看起來跟html差不多,但是最近做項目由於用的是thinkphp5.0的版本,做的過程中還是遇到了一些問題。在這里做一下記錄。
首先我們需要定義一個dom對象,我們都知道 php中是這樣來寫的
> $dom = new DOMDocument();
可是這時候就報錯了,第一步就卡住了,別說進行下面的DOM操作了
於是我翻了thinkPHP5.0手冊,手冊上倒是提了句關於命名空間,
如果你需要調用PHP內置的類庫,或者第三方沒有使用命名空間的類庫,記得在實例化類庫的時候加上 \
$xml = new \ SimpleXmlElement($xmlstr);
可惜我當時腦子愚笨,並沒有受啟發,后來翻了好些博客,才終於看到
> $dom = new \DOMDocument();
好了。DOM對象終於有了,終於可以操作DOM了
$dom->loadXML($xmlStr); //將xml字符串轉換為xml文檔 $link = $dom->getElementByTagName('MobileNoteLink'); $Item = $dom->createElement('MobileNodeItem); $Item->setAttribute('to',$param['to']); $link->appendChild($Item);
然后看了一下,嘿,咋又報錯了,我這啥都沒干,就是基本的DOM操作啊,,,
這一下可是費了好久的時間才找到問題
> $link = $dom->getElementByTagName('MobileNoteLink')->item(0);
你得獲取到特定的那個標簽元素,不然他就會把所有的標簽都獲取到,成了一個集合
最后一步,因為這是后台操作XML,數據庫的值呢是xml格式的,我也是第一次碰到這樣的情況,還是經驗太少,嘻嘻
需要將xml文檔轉換為xml格式字符串
$newXML = $dom->saveXML();
再之后將字符串插入數據庫就行了。
-------------------------------------------------------------------------------------------------------------------------------
用上述這種方式,在linux下需要安裝php,編譯 ./configure時安裝相關的xml庫
所以,可以使用另一種在thinkphp下也可以處理xml simplexml_load_string()將xml字符串轉換為xml對象
添加: addChild(),為節點添加屬性直接 item['content']
刪除: unset($xml->MobileLink) 刪除對應節點
編輯:
$xml->MobileLink->MobileItem['Content'] = $param['content']