php中simplexml_load_file()函數用法詳細

來源:互聯網
上載者:User

表面看到的不一定是真的,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="&#x1A;ǒˇ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 可選。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.