php专区

 首页 > php专区 > PHP应用 > 常用功能 > php中simplexml_load_string使用实例 - php高级应用

php中simplexml_load_string使用实例 - php高级应用

分享到:
【字体:
导读:
          在php中simplexml_load_string() 函数把 XML 字符串载入对象中,下面我来给大家介绍几个简单实例的同时也介绍在使用simplexml_load_string的一些需要注意的事项.先用一段代码重现一下问题,乍一看...

php中simplexml_load_string使用实例

在php中simplexml_load_string() 函数把 XML 字符串载入对象中,下面我来给大家介绍几个简单实例的同时也介绍在使用simplexml_load_string的一些需要注意的事项.

先用一段代码重现一下问题,乍一看,结果很让人费解,代码如下:

  1. $string = <<
  2.   
  3. hello  
  4. world  
  5.   
  6. EOF; 
  7.  
  8. $data = simplexml_load_string($string); 
  9.  
  10. print_r($data);  
  11. print_r($data->foo);  
  12. ?> 
  13.  
  14. SimpleXMLElement Object  
  15. (  
  16. [foo] => Array  
  17. (  
  18. [0] => SimpleXMLElement Object  
  19. (  
  20. [bar] => hello  
  21. )  
  22. [1] => SimpleXMLElement Object  
  23. (  
  24. [bar] => world  
  25. )  
  26. //开源代码phpfensi.com 
  27. )  
  28. SimpleXMLElement Object  
  29. (  
  30. [bar] => hello  

明明print_r显示foo是一个有两个bar元素的数组,但是最后却仅仅显示了一个bar元素,原因其实很简单,在如上所示simplexml_load_string的结果里,foo并不是数组,而是一个迭代对象.

可以这样确认,代码如下:

foreach ($data->foo as $v) print_r($v); 

foreach ($data->children() as $v) print_r($v);

看来,print_r或者var_dump之类的表象并不完全可信,假如我们获取的XML数据如下,可以使用curl、fsockopen等方式获取,代码如下:

  1. xml version="1.0" encoding="UTF-8"?> 
  2. <dict num="219" id="219" name="219"> 
  3.  <key>你好key> 
  4.  <pos>pos> 
  5.  <acceptation>Array;Array;Array;acceptation> 
  6.  <sent> 
  7.   <orig>Haven't seen you for a long time. How are you?orig> 
  8.   <trans>多日不见了,你好吗?trans> 
  9.  sent> 
  10.  <sent> 
  11.   <orig>Hello! How are you?orig> 
  12.   <trans>嘿,你好?trans> 
  13.  sent> 
  14.  <sent> 
  15.   <orig>Hello, Brooks!How are you?orig> 
  16.   <trans>喂,布鲁克斯!你好吗?trans> 
  17.  sent> 
  18.  <sent> 
  19.   <orig>Hi, Barbara, how are you?orig> 
  20.   <trans>嘿,芭芭拉,你好吗?trans> 
  21.  sent> 
  22.  <sent> 
  23.   <orig>How are you? -Quite well, thank you.orig> 
  24.   <trans>你好吗?-很好,谢谢你。trans> 
  25.  sent> 
  26. dict>  

经过simplexml_load_string得到如下代码:

  1. SimpleXMLElement Object 
  2.     [@attributes] => Array 
  3.         ( 
  4.             [num] => 219 
  5.             [id] => 219 
  6.             [name] => 219 
  7.         ) 
  8.  
  9.     [key] => 你好www.phpfensi.com 
  10.     [pos] => SimpleXMLElement Object 
  11.         ( 
  12.         ) 
  13.  
  14.     [acceptation] => Array;Array;Array; 
  15.     [sent] => Array 
  16.         ( 
  17.             [0] => SimpleXMLElement Object 
  18.                 ( 
  19.                     [orig] => Haven't seen you for a long time. How are you? 
  20.                     [trans] => 多日不见了,你好吗? 
  21.                 ) 
  22.  
  23.             [1] => SimpleXMLElement Object 
  24.                 ( 
  25.                     [orig] => Hello! How are you? 
  26.                     [trans] => 嘿,你好? 
  27.                 ) 
  28.  
  29.             [2] => SimpleXMLElement Object 
  30.                 ( 
  31.                     [orig] => Hello, Brooks!How are you? 
  32.                     [trans] => 喂,布鲁克斯!你好吗? 
  33.                 ) 
  34.  
  35.             [3] => SimpleXMLElement Object 
  36.                 ( 
  37.                     [orig] => Hi, Barbara, how are you? 
  38.                     [trans] => 嘿,芭芭拉,你好吗? 
  39.                 ) 
  40.  
  41.             [4] => SimpleXMLElement Object 
  42.                 ( 
  43.                     [orig] => How are you? -Quite well, thank you. 
  44.                     [trans] => 你好吗?-很好,谢谢你。 
  45.                 ) 
  46.  
  47.         ) 
  48.  

我们在PHP语言中可以用以下方法取得我们想要的值,代码如下:

  1. $data = <<
  2. "1.0" encoding="UTF-8"?> 
  3. "219" id="219" name="219"
  4.  你好 
  5.   
  6.  Array;Array;Array; 
  7.   
  8.   Haven't seen you for a long time. How are you? 
  9.   多日不见了,你好吗? 
  10.   
  11.   
  12.   Hello! How are you? 
  13.   嘿,你好? 
  14.   
  15.   
  16.   Hello, Brooks!How are you? 
  17.   喂,布鲁克斯!你好吗? 
  18.   
  19.   
  20.   Hi, Barbara, how are you? 
  21.   嘿,芭芭拉,你好吗? 
  22.   
  23.   
  24.   How are you? -Quite well, thank you. 
  25.   你好吗?-很好,谢谢你。 
  26.   
  27.  
  28. XML; 
  29. $xmldata = simplexml_load_string($data); 
  30. header("Content-Type: text/html; charset=UTF-8"); 
  31. print_r($xmldata); 
  32. echo "".trim($xmldata->sent[0]->orig); //Haven't seen you for a long time. How are you? 
  33. echo "".trim($xmldata->key); //你好 
  34. ?>
分享到:
php中SimpleXML生成与解析xml文件 - php...
php中SimpleXML生成与解析xml文件 在php中对xml文档操作我们有很多类可以使用,php SimpleXML就是一个很不错的xml解析器,下面我来给大家举两个应用实例. 例,生成xml文档,代码如下: class SimpleXMLExtended extends SimpleXMLElement {     public function addCData($cdata...
xmllint命令处理xml与html的例子 - php高...
xmllint命令处理xml与html的例子 xmllint是一个很方便的处理及验证xml、处理html的工具,linux下只要安装libxml2就可以使用这个命令,首先看下其结合--html、--xpath参数处理html时的例子. 例子:curl http://www.phpfensi.com /ip/?q=8.8.8.8 2>/dev/null | xmllint --html --xpath "//ul[@id=...
  •         php迷,一个php技术的分享社区,专属您自己的技术摘抄本、收藏夹。
  • 在这里……