表面看到的不一定是真的,file_get_contents或者curl遠程抓一下,看其是否是一個有效XML
特殊字元是會引起simplexml_load_file解析XML失敗的,函數會報錯
定義和用法
simplexml_load_file() 函數把 XML 文檔載入對象中。
如果失敗,則返回 false。
文法
simplexml_load_file(file,class,options,ns,is_prefix)參數 描述
file 必需。規定要使用的 XML 文檔。
class 可選。規定新對象的 class。
options 可選。規定附加的 Libxml 參數。
ns 可選。
is_prefix 可選。
執行個體
例子 1. Interpret an XML document
代碼如下 |
複製代碼 |
<?php // The file test.xml contains an XML document with a root element // and at least an element /[root]/title. if (file_exists('test.xml')) { $xml = simplexml_load_file('test.xml'); var_dump($xml); } else { exit('Failed to open test.xml.'); } ?> This script will display, on success: SimpleXMLElement Object ( [title] => Example Title ... ) |
At this point, you can go about using $xml->title and any other elements.
第一家比較詭異,看原始碼及IE頁面,毛問題沒有,函數就是報錯。後來想了個辦法,file_get_contents一下,發現丫的在XML資料前面和後面分別有一串數字。於是XML無法順利解析,這個分析起來還好些,而另一個就堪稱頭疼了。
XML格式如下:
代碼如下 |
複製代碼 |
<Result value="true" message="Success!"> <Item ID="8861" UserName="30121740" NickName="ǒˇFEΙでァ" Grade="16" Repute="168" Sex="false" WinCount="138" TotalCount="229" ConsortiaName="聖域" Rename="false" ConsortiaRename="false" EscapeCount="0" IsFirst="31" FightPower="3032" /> </Result> |
初步分析是由於 裡面NickName亂碼導致,於是實驗另一地址:
代碼如下 |
複製代碼 |
<Result value="true" message="Success!"> <Item ID="7" UserName="13792776" NickName="龍哥" Grade="1" Repute="313119" Sex="true" WinCount="0" TotalCount="0" ConsortiaName="" Rename="false" ConsortiaRename="false" EscapeCount="0" IsFirst="34" FightPower="0" /> </Result> |
毛問題沒有,很顯然是這個NickName亂碼造成的。於是開始了漫長且無奈的溝通,不過人家合作方不認為自己的檔案格式有問題
返回類 SimpleXMLElement 的一個對象,該對象的屬性包含 XML 文檔中的資料。如果失敗,則返回 false。
simplexml_load_file解析xml詳細執行個體
xml文檔格式如下
代碼如下 |
複製代碼 |
<?xml version="1.0" encoding="utf-8"?> <list> <company>武漢xxx公司</company> <user> <name>張三</name> <age sex="未知">a</age> <height>1</height> </user> <user> <name>李四</name> <age sex="女">b</age> <height>2</height> </user> <user> <name>王五</name> <age sex="男">c</age> <height>3</height> </user> <town parent="0" id="1">台北</town> <town parent="1" id="2">板橋</town> <town parent="0" id="3">桃園</town> </list> |
php解析代碼
*/
代碼如下 |
複製代碼 |
header("content-type:text/html; charset=utf-8"); //設定編碼 $xml = simplexml_load_file('a.xml'); //載入xml檔案 $lists和xml檔案的根節點是一樣的 echo $xml->company."<br>"; echo $xml->town."<br>id:"; echo $xml->town['id']."<br>parent:"; echo $xml->town['parent']."<br>"; echo "<br>迴圈讀取:<br>"; foreach($xml->user as $users){ //有多個user,取得的是數組,迴圈輸出 echo "-------------------<br>"; echo "姓名:".$users->name."<br>"; echo "編號:".$users->age."<br>"; echo "性別:".$users->age['sex']."<br>"; echo "序號:".$users->height."<br>"; } echo "<br>迴圈讀取:<br>"; foreach($xml->town as $towns){ //有多個user,取得的是數組,迴圈輸出 echo "-------------------<br>"; echo "id:".$towns['id']."<br>"; echo "歸屬:".$towns['parent']."<br>"; echo "地區:".$towns."<br>"; } |
/*
定義和用法
simplexml_load_file() 函數把 xml 文檔載入對象中。
如果失敗,則返回 false。
文法
simplexml_load_file(file,class,options,ns,is_prefix)參數 描述
file 必需。規定要使用的 xml 文檔。
class 可選。規定新對象的 class。
options 可選。規定附加的 libxml 參數。
ns 可選。
is_prefix 可選。