找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 145|回复: 0
打印 上一主题 下一主题

php中simplexml_load_string使用实例分享

[复制链接]

2536

主题

2536

帖子

7532

积分

论坛元老

Rank: 8Rank: 8

积分
7532
跳转到指定楼层
楼主
发表于 2018-2-14 06:00:30 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

            先用一段代码重现一下问题
乍一看,结果很让人费解:
[U]复制代码[/U] 代码如下:

hello
world

EOF;
$data = simplexml_load_string($string);
print_r($data);
print_r($data->foo);
?>
乍一看,结果很让人费解:
[U]复制代码[/U] 代码如下:
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并不是数组,而是一个迭代对象!
可以这样确认:
[U]复制代码[/U] 代码如下:
foreach ($data->foo as $v) print_r($v);
foreach ($data->children() as $v) print_r($v);
看来,print_r或者var_dump之类的表象并不完全可信,自己多留心吧。
假如我们获取的XML数据如下:(可以使用curl、fsockopen等方式获取)
[U]复制代码[/U] 代码如下:
你好

Array;Array;Array;

  Haven't seen you for a long time. How are you?
  [tr]多日不见了,你好吗?[/tr]


  Hello! How are you?
  [tr]嘿,你好?[/tr]


  Hello, Brooks!How are you?
  [tr]喂,布鲁克斯!你好吗?[/tr]


  Hi, Barbara, how are you?
  [tr]嘿,芭芭拉,你好吗?[/tr]


  How are you? -Quite well, thank you.
  [tr]你好吗?-很好,谢谢你。[/tr]


经过simplexml_load_string得到:
[U]复制代码[/U] 代码如下:
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语言中可以用以下方法取得我们想要的值:
[U]复制代码[/U] 代码如下:
你好

Array;Array;Array;

  Haven't seen you for a long time. How are you?
  [tr]多日不见了,你好吗?[/tr]


  Hello! How are you?
  [tr]嘿,你好?[/tr]


  Hello, Brooks!How are you?
  [tr]喂,布鲁克斯!你好吗?[/tr]


  Hi, Barbara, how are you?
  [tr]嘿,芭芭拉,你好吗?[/tr]


  How are you? -Quite well, thank you.
  [tr]你好吗?-很好,谢谢你。[/tr]

XML;
$xmldata = simplexml_load_string($data);
header("Content-Type: text/html; charset=UTF-8");
print_r($xmldata);
echo "
".trim($xmldata->sent[0]->orig); //Haven't seen you for a long time. How are you?
echo "
".trim($xmldata->key); //你好
?>
            
            
您可能感兴趣的文章:
  • php下使用SimpleXML 处理XML 文件
  • PHP中simplexml_load_string函数使用说明
  • php simplexmlElement操作xml的命名空间实现代码
  • php的SimpleXML方法读写XML接口文件实例解析
  • php中simplexml_load_file函数用法实例
  • PHP中SimpleXML函数用法分析
  • PHP中使用SimpleXML检查XML文件结构实例
  • php+xml编程之SimpleXML的应用实例
            
  • 分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    用户反馈
    客户端