php中simplexml_load_file()函数用法详细

本文章详细的介绍了关于simplexml_load_file函数的用法,有需要了解的同学可以看看本函数详细实例.

表面看到的不一定是真的,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,代码如下:

  1. <?php
  2. // The file test.xml contains an XML document with a root element
  3. // and at least an element /[root]/title.
  4. if (file_exists('test.xml')) {
  5. $xml = simplexml_load_file('test.xml');
  6. var_dump($xml);
  7. } else {
  8. exit('Failed to open test.xml.');
  9. }
  10. ?>
  11. This script will display, on success:
  12. SimpleXMLElement Object
  13. (
  14. [title] => Example Title
  15. ...
  16. )

看源代码及IE页面,没有问题,函数就是报错,后来想了个办法,file_get_contents一下,发现丫的在XML数据前面和后面分别有一串数字,于是XML无法顺利解析,这个分析起来还好些,而另一个就堪称头疼了.

XML格式如下:

  1. <Result value="true" message="Success!">
  2. <Item 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" />
  3. </Result>

初步分析是由于 里面NickName乱码导致,于是试验另一地址,代码如下:

  1. <Result value="true" message="Success!">
  2. <Item UserName="13792776" NickName="龙哥" Grade="1" Repute="313119" Sex="true" WinCount="0" TotalCount="0" ConsortiaName="" Rename="false" ConsortiaRename="false" EscapeCount="0" IsFirst="34" FightPower="0" />
  3. </Result>

没有问题,很显然是这个NickName乱码造成的,于是开始了漫长且无奈的沟通,不过人家合作方不认为自己的文件格式有问题.

返回类 SimpleXMLElement 的一个对象,该对象的属性包含 XML 文档中的数据,如果失败,则返回 false.

simplexml_load_file解析xml详细实例.

xml文档格式如下:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <list>
  3. <company>武汉xxx公司</company>
  4. <user>
  5. <name>张三</name>
  6. <age sex="未知">a</age>
  7. <height>1</height>
  8. </user>
  9. <user>
  10. <name>李四</name>
  11. <age sex="女">b</age>
  12. <height>2</height>
  13. </user>
  14. <user>
  15. <name>王五</name>
  16. <age sex="男">c</age>
  17. <height>3</height>
  18. </user>
  19. <town parent="0" >台北</town>
  20. <town parent="1" >板桥</town>
  21. <town parent="0" >桃园</town>
  22. </list>

php解析代码如下:

  1. header("content-type:text/html; charset=utf-8"); //设置编码
  2. $xml = simplexml_load_file('a.xml'); //载入xml文件 $lists和xml文件的根节点是一样的
  3. echo $xml->company."<br>";
  4. echo $xml->town."<br>id:";
  5. echo $xml->town['id']."<br>parent:";
  6. echo $xml->town['parent']."<br>";
  7. echo "<br>循环读取:<br>";
  8. foreach($xml->user as $users){ //有多个user,取得的是数组,循环输出
  9. echo "-------------------<br>";
  10. echo "姓名:".$users->name."<br>";
  11. echo "编号:".$users->age."<br>";
  12. echo "性别:".$users->age['sex']."<br>";
  13. echo "序号:".$users->height."<br>";
  14. }
  15. //开源代码phpfensi.com
  16. echo "<br>循环读取:<br>";
  17. foreach($xml->town as $towns){ //有多个user,取得的是数组,循环输出
  18. echo "-------------------<br>";
  19. echo "id:".$towns['id']."<br>";
  20. echo "归属:".$towns['parent']."<br>";
  21. echo "地区:".$towns."<br>";
  22. }

定义和用法:

simplexml_load_file() 函数把 xml 文档载入对象中,如果失败,则返回 false.

语法:simplexml_load_file(file,class,options,ns,is_prefix)

参数 描述

file 必需。规定要使用的 xml 文档。

class 可选。规定新对象的 class。

options 可选。规定附加的 libxml 参数。

ns 可选。

is_prefix 可选。