• 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] => 你好www.111cn.Net
        [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); //你好
    ?>
     

    更多详细内容请查看:http://www.111cn.net/phper/xml/57801.htm

  • 相关阅读:
    现代软件工程_团队项目_阿尔法阶段_后端python部分编程规范_2017.11.28
    现代软件工程_团队项目_阿尔法阶段_阿里云服务器部署_2017.11.24
    现代软件工程_团队项目_阿尔法阶段_前端知识分享_2017.11.22
    JavaScript基础(二)
    JavaScript基础(一)
    Socket接口
    【学习】CSS基础(一)
    【学习】HTML基础(二)
    【学习】HTML基础入门(一)
    现代软件工程_团队项目_阿尔法阶段_前端页面原型v1.0.2_2017.11.14
  • 原文地址:https://www.cnblogs.com/alibai/p/3547483.html
Copyright © 2020-2023  润新知