当前位置:首页 > PHP教程 > php高级应用 > 列表

php中simplexml_load_string使用实例

发布:smiling 来源: PHP粉丝网  添加日期:2014-08-20 11:14:28 浏览: 评论:0 

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

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

  1. <?php  
  2. $string = <<<EOF  
  3. <data>  
  4. <foo><bar>hello</bar></foo>  
  5. <foo><bar>world</bar></foo>  
  6. </data>  
  7. EOF; 
  8.  
  9. $data = simplexml_load_string($string); 
  10.  
  11. print_r($data);  
  12. print_r($data->foo);  
  13. ?> 
  14.  
  15. SimpleXMLElement Object  
  16. (  
  17. [foo] => Array  
  18. (  
  19. [0] => SimpleXMLElement Object  
  20. (  
  21. [bar] => hello  
  22. )  
  23. [1] => SimpleXMLElement Object  
  24. (  
  25. [bar] => world  
  26. )  
  27. //开源代码phpfensi.com 
  28. )  
  29. SimpleXMLElement Object  
  30. (  
  31. [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. <?php 
  2. $data = <<<XML 
  3. <?xml version="1.0" encoding="UTF-8"?> 
  4. <dict num="219" id="219" name="219"
  5.  <key>你好</key> 
  6.  <pos></pos> 
  7.  <acceptation>Array;Array;Array;</acceptation> 
  8.  <sent> 
  9.   <orig>Haven't seen you for a long time. How are you?</orig> 
  10.   <trans>多日不见了,你好吗?</trans> 
  11.  </sent> 
  12.  <sent> 
  13.   <orig>Hello! How are you?</orig> 
  14.   <trans>嘿,你好?</trans> 
  15.  </sent> 
  16.  <sent> 
  17.   <orig>Hello, Brooks!How are you?</orig> 
  18.   <trans>喂,布鲁克斯!你好吗?</trans> 
  19.  </sent> 
  20.  <sent> 
  21.   <orig>Hi, Barbara, how are you?</orig> 
  22.   <trans>嘿,芭芭拉,你好吗?</trans> 
  23.  </sent> 
  24.  <sent> 
  25.   <orig>How are you? -Quite well, thank you.</orig> 
  26.   <trans>你好吗?-很好,谢谢你。</trans> 
  27.  </sent> 
  28. </dict> 
  29. XML; 
  30. $xmldata = simplexml_load_string($data); 
  31. header("Content-Type: text/html; charset=UTF-8"); 
  32. print_r($xmldata); 
  33. echo "<br />".trim($xmldata->sent[0]->orig); //Haven't seen you for a long time. How are you? 
  34. echo "<br />".trim($xmldata->key); //你好 
  35. ?>

Tags: simplexml_load_string php使用实例

分享到: