php中simplexml

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

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

 代码如下  

<?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); //你好
?>

时间: 2024-09-20 00:46:41

php中simplexml的相关文章

entity-php5.6.12中SimpleXML是否默认不解析外部实体

问题描述 php5.6.12中SimpleXML是否默认不解析外部实体 有两个文件 xml.php: <?php var_dump(simplexml_load_file('test.xml')); ?> test.xml: <?xml version=""1.0"" encoding=""UTF-8""?> <!DOCTYPE a[ <!ENTITY b SYSTEM "&quo

PHP中SimpleXML函数用法分析_php技巧

本文实例讲述了关于php中SimpleXML 函数的用法,此函数是允许您把 XML 转换为对象,分享给大家供大家参考.具体分析如下: SimpleXML 函数允许您把 XML 转换为对象,通过普通的属性选择器或数组迭代器,可以处理这个对象,就像处理任何其他对象一样.其中的一些函数需要最新的 PHP 版本. 安装:SimpleXML 函数是 PHP 核心的组成部分,无需安装即可使用这些函数,代码如下: 复制代码 代码如下: <?php  //以对象形式返回所有内容  $lib = simplexm

php中SimpleXML生成与解析xml文件

例,生成xml文档  代码如下 复制代码 class SimpleXMLExtended extends SimpleXMLElement {   public function addCData($cdata_text) {     $node = dom_import_simplexml($this);     $no   = $node->ownerDocument;     $node->appendChild($no->createCDATASection($cdata_tex

怎样在PHP 中运用 SimpleXML 处理任务

PHP是一种基于服务端来创建动态网站的脚本语言,您可以用PHP和HTML生成网站主页.当一个访问者打开主页时,服务端便执行PHP的命令并将执行结 果发送至访问者的浏览器中,这类似于ASP和CoildFusion. 然而PHP和他们不同之处在于PHP开放源码和跨越平台,PHP可以运行在 WINDOWS NT和多种版本的UNIX上.它不需要任何预先处理而快速反馈结果,它也不需要mod_perl的调整来使您的服务器的内存映象减小. PHP消耗的资源较 少,当PHP作为Apache Web服务器一部分时

PHP中的SimpleXML处理

简介:了解和 PHP 版本 5 捆绑到一起的 SimpleXML 扩展,它使 PHP 页面能够以 PHP 友好的语法来 查询.搜索.修改和重新发布 XML. PHP 版本 5 引入了 SimpleXML,一种用于读写 XML 的新的应用程序编程接口(API).在 SimpleXML 中,下面的这样的表达式: $doc->rss->channel->item->title 从文档中选择元素.只要熟悉文档的结构,很容易编写这种表达式.但是,如果不很清楚需要的元素 出现在何处(比如 Do

php中DOMDocument与SimpleXML创建与解析xml程序

例子: DOM XML 解析器函数是 PHP 核心的组成部分.无需安装就可以使用这些函数. XML 文件 将在我们的例子中使用下面的 XML 文件:  代码如下 复制代码 <?xml version="1.0" encoding="ISO-8859-1"?> <note> <to>George</to> <from>John</from> <heading>Reminder</

怎样在PHP中运用SimpleXML处理任务

PHP是一种基于服务端来创建动态网站的脚本语言,您可以用PHP和HTML生成网站主页.当一个访问者打开主页时,服务端便执行PHP的命令并将执行结 果发送至访问者的浏览器中,这类似于ASP和CoildFusion. 然而PHP和他们不同之处在于PHP开放源码和跨越平台,PHP可以运行在 WINDOWS NT和多种版本的UNIX上.它不需要任何预先处理而快速反馈结果,它也不需要mod_perl的调整来使您的服务器的内存映象减小. PHP消耗的资源较 少,当PHP作为Apache Web服务器一部分时

在PHP中开发XML应用程序之基础篇

xml|程序 一. XML简介 XML(可扩展的标注语言)是一种W3C标准,主要用于Web应用程序和服务器之间实现容易的交互.数据的存储与使用. 使用XML标准编码的数据具有能容易被人和计算机解释的意义和结构.XML数据是平台和应用程序独立的.不用多说,这本身就使XML成为适合于互联网的一个理想的数据交换格式(事实上,它正是因这一用途而被开发的).最近,宽带连接的增长及消费者对于越过任何媒体进行数据共享的应用软件的需求意味着,XML Web服务和应用软件正变得越来越丰富. XML的发明正是为了解

关于在php.ini中添加extension=php

在配置php5时要使用mysql作为数据库,很多人都认为只要在php.ini中添加extension=php_mysql.dll;指令即可,不清楚为什么很多文章都推荐还要添加extension=php_mysqli.dll;指令. 只要查看官方最新php手册便知,上面写到: 下面是内置的扩展库列表:  PHP 5 中(截止到 5.0.4)有以下修改.新增内置:DOM,LibXML,Iconv,SimpleXML,SPL 和SQLite.以下不再内置:MySQL 和 Overload. 原来php