明確目標:1、理解xml的結構,2、如何動態建立xml文件,3、如何讀取和修改xml文件
一、xml的結構是樹形結構,這個好理解,簡單寫一個:
- 1 <pictures> 2 <picture> 3 <id>1</id> 4 <name>pic 1</name> 5 </picture> 6 <picture> 7 <id>2</id> 8 <name>pic 2</name> 9 </picture>10 <picture>11 <id>3</id>12 <name>pic 3</name>13 </picture>14 </pictures>
二、使用的php創建:
1. 定義一個dom對象:$dom = new domdocument('1.0');
2. 添加子元素:$dom->appendchild($dom->createelement("pictures"))
內存中的原型是:<pictures></pictures>
繼續往里邊加子元素:*->appendchild($dom->createelement("picture"));
繼續加:**->appendchild($dom->createelement("id"));
不加子元素了,加節點: ***->appendchild($dom->createnode("1"))
上面的*代表上上一行的代碼,這樣一來就可以寫成一行:
$dom->appendchild($dom->createelement("pictures"))->appendchild($dom->createelement("picture"))->appendchild($dom->createelement("id"))->appendchild($dom->createnode("1"));
現在內存中應該是這樣的:<pictures><picture><id>1</id></picture></pictures>
顯然離要求還遠,很容易看懵的,因此一般這么寫:$pictures = $dom->appendchild($dom->createelement("pictures"));
$picture = $pictures->appendchild($dom->createelement("picture"));
$id = $picture->appendchild($dom->createelement("id"));
$id->appendchild($dom->createnode("1"));
下面還可以接著創建name節點:
$name = $picture->appendchild($dom->createelement("name"));
$name->appendchild($dom->createnode("pic 1"));
接下來還要接著創建picture節點:
$picture = $pictures->appendchild($dom->createelement("picture"));
其實這些麻煩的事可以寫個for循環來實現.
生成xml文件:
$dom->formatoutput = true;//設置格式化輸出
$dom->save("erhsh.xml");//保存xml文件
三、讀取xml文件
1、還是定義一個dom對象;$dom->new domdocument();
2、加載xml文件:$dom->load("erhsh.xml");
3、按照節點的名字取得節點集合:$dom->getelementbytagname("pictures");
不過有一種我喜歡的方法:simplexml_load_file("erhsh.xml");此方法可以把xml文件的內容轉換成對象的形式,使用"->"結和"[]"很容易去的xml的內容;
但是在開發中還是遇到了一點問題,當執行:print_r($xml->pictures);時輸出的是一個 simplexmlelement 對象,([picture] => array([0]=>array(...)[1]=>array(...)));
再執行:print_r($xml->pictures->picture);輸出的是n個分開的對象.
執行:print_r($xml->pictures->picture[0]->id);輸出的還是一個對象,這就很不理解,應該是一個字符串, 最后網上說是“迭代對象”,應該使用echo輸出,print_r(), var_dump()輸出不準確.
新聞熱點
疑難解答