PHP头条
热点:

php中simplexml_load_string使用实例介绍


 这篇文章主要介绍了php中simplexml_load_string使用实例,需要的朋友可以参考下

先用一段代码重现一下问题

 

乍一看,结果很让人费解:

 

 代码如下:

<?php 

$string = <<<EOF 

<data> 

<foo><bar>hello</bar></foo> 

<foo><bar>world</bar></foo> 

</data> 

EOF;

 

$data = simplexml_load_string($string);

 

print_r($data); 

print_r($data->foo); 

?>

 

 

 

乍一看,结果很让人费解:

 

代码如下:

SimpleXMLElement Object 

[foo] => Array 

[0] => SimpleXMLElement Object 

[bar] => hello 

[1] => SimpleXMLElement Object 

[bar] => world 

SimpleXMLElement Object 

[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等方式获取)

 

 

代码如下:

<?xml version="1.0" encoding="UTF-8"?>

<dict num="219" id="219" name="219">

 <key>你好</key>

 <pos></pos>

 <acceptation>Array;Array;Array;</acceptation>

 <sent>

  <orig>Haven't seen you for a long time. How are you?</orig>

  <trans>多日不见了,你好吗?</trans>

 </sent>

 <sent>

  <orig>Hello! How are you?</orig>

  <trans>嘿,你好?</trans>

 </sent>

 <sent>

  <orig>Hello, Brooks!How are you?</orig>

  <trans>喂,布鲁克斯!你好吗?</trans>

 </sent>

 <sent>

  <orig>Hi, Barbara, how are you?</orig>

  <trans>嘿,芭芭拉,你好吗?</trans>

 </sent>

 <sent>

  <orig>How are you? -Quite well, thank you.</orig>

  <trans>你好吗?-很好,谢谢你。</trans>

 </sent>

</dict> 

 

 

经过simplexml_load_string得到:

代码如下:

SimpleXMLElement Object

(

    [@attributes] => Array

        (

            [num] => 219

            [id] => 219

            [name] => 219

        )

 

    [key] => 你好

    [pos] => SimpleXMLElement Object

        (

        )

 

    [acceptation] => Array;Array;Array;

    [sent] => Array

        (

            [0] => SimpleXMLElement Object

                (

                    [orig] => Haven't seen you for a long time. How are you?

                    [trans] => 多日不见了,你好吗?

                )

 

            [1] => SimpleXMLElement Object

                (

                    [orig] => Hello! How are you?

                    [trans] => 嘿,你好?

                )

 

            [2] => SimpleXMLElement Object

                (

                    [orig] => Hello, Brooks!How are you?

                    [trans] => 喂,布鲁克斯!你好吗?

                )

 

            [3] => SimpleXMLElement Object

                (

                    [orig] => Hi, Barbara, how are you?

                    [trans] => 嘿,芭芭拉,你好吗?

                )

 

            [4] => SimpleXMLElement Object

                (

                    [orig] => How are you? -Quite well, thank you.

                    [trans] => 你好吗?-很好,谢谢你。

                )

 

        )

 

)

 

 

 

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

 

码 代码如下:

<?php

$data = <<<XML

<?xml version="1.0" encoding="UTF-8"?>

<dict num="219" id="219" name="219">

 <key>你好</key>

 <pos></pos>

 <acceptation>Array;Array;Array;</acceptation>

 <sent>

  <orig>Haven't seen you for a long time. How are you?</orig>

  <trans>多日不见了,你好吗?</trans>

 </sent>

 <sent>

  <orig>Hello! How are you?</orig>

  <trans>嘿,你好?</trans>

 </sent>

 <sent>

  <orig>Hello, Brooks!How are you?</orig>

  <trans>喂,布鲁克斯!你好吗?</trans>

 </sent>

 <sent>

  <orig>Hi, Barbara, how are you?</orig>

  <trans>嘿,芭芭拉,你好吗?</trans>

 </sent>

 <sent>

  <orig>How are you? -Quite well, thank you.</orig>

  <trans>你好吗?-很好,谢谢你。</trans>

 </sent>

</dict>

XML;

$xmldata = simplexml_load_string($data);

header("Content-Type: text/html; charset=UTF-8");

print_r($xmldata);

echo "<br />".trim($xmldata->sent[0]->orig); //Haven't seen you for a long time. How are you?

echo "<br />".trim($xmldata->key); //你好

?>

 

www.phpzy.comtrue/php/29383.htmlTechArticlephp中simplexml_load_string使用实例介绍 这篇文章主要介绍了php中simplexml_load_string使用实例,需要的朋友可以参考下 先用一段代码重现一下问题 乍一看,结果很让人费解: 代码如下: ?php $st...

相关文章

    暂无相关文章

PHP之友评论

今天推荐