php中simplexml_load_file函数使用方法

 更新时间:2016年11月25日 16:46  点击:1779
在php中simplexml_load_file() 函数把 XML 文档载入对象中之后我们就可以利用由此函数返回回的对象进行相关的操作了,下面我们看几个测试实例。

例子

XML 文件:

 代码如下 复制代码

<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>

PHP 代码:

<?php
if (file_exists('test.xml'))
  {
  $xml = simplexml_load_file('test.xml');
  var_dump($xml);
  }

else
  {
  exit('Error.');
  }
?>

输出:

object(SimpleXMLElement)#1 (4)
{
["to"]=> string(4) "George"
["from"]=> string(4) "John"
["heading"]=> string(8) "Reminder"
["body"]=> string(29) "Don't forget the meeting!"
}

假如有一个“iciba.xml”文件,其内容如下:

 代码如下 复制代码

<?xml version="1.0" encoding="UTF-8"?>
<dict num="219" id="219" name="219">
 <key>天空</key>
 <pos></pos>
 <acceptation>Array;Array;</acceptation>
 <sent>
  <orig>The church tower stood against the sky like a finger pointing towards heaven.</orig>
  <trans>教堂的尖塔在天空的映衬下宛如指向天空的手指。</trans>
 </sent>
 <sent>
  <orig>A balloon floated across the sky.</orig>
  <trans>气球飘过天空。</trans>
 </sent>
 <sent>
  <orig>A bolt of lightning lit up the sky.</orig>
  <trans>(一道)闪电照亮了天空。</trans>
 </sent>
 <sent>
  <orig>A bright moving object appeared in the sky at sunset.</orig>
  <trans>日落西山时,天空出现了一个移动的发亮物体。</trans>
 </sent>
 <sent>
  <orig>A bright rainbow arched above.</orig>
  <trans>一弯明亮的彩虹悬挂在天空。</trans>
 </sent>
</dict>在PHP语言中我们可以用以下方法取得我们想要的值:

<?php
$xmldata = simplexml_load_file("iciba.xml");

header("Content-Type: text/html; charset=UTF-8");
print_r($xmldata); //第一部分www.111cn.net

$listcount = count($xmldata->sent);

for($i=0;$i<$listcount;$i++){ //第二部分
 $dictlist = $xmldata->sent[$i];
 echo "<br />例句:".$dictlist->orig;
 echo "<br />翻译:".$dictlist->trans;
}
?>“第一部分”将输出:

SimpleXMLElement Object
(
    [@attributes] => Array
        (
            [num] => 219
            [id] => 219
            [name] => 219
        )

    [key] => 天空
    [pos] => SimpleXMLElement Object
        (
        )

    [acceptation] => Array;Array;
    [sent] => Array
        (
            [0] => SimpleXMLElement Object
                (
                    [orig] => The church tower stood against the sky like a finger pointing towards heaven.
                    [trans] => 教堂的尖塔在天空的映衬下宛如指向天空的手指。
                )

            [1] => SimpleXMLElement Object
                (
                    [orig] => A balloon floated across the sky.
                    [trans] => 气球飘过天空。
                )

            [2] => SimpleXMLElement Object
                (
                    [orig] => A bolt of lightning lit up the sky.
                    [trans] => (一道)闪电照亮了天空。
                )

            [3] => SimpleXMLElement Object
                (
                    [orig] => A bright moving object appeared in the sky at sunset.
                    [trans] => 日落西山时,天空出现了一个移动的发亮物体。
                )

            [4] => SimpleXMLElement Object
                (
                    [orig] => A bright rainbow arched above.
                    [trans] => 一弯明亮的彩虹悬挂在天空。
                )

        )

)“第二部分”将输出:

例句:The church tower stood against the sky like a finger pointing towards heaven.
翻译:教堂的尖塔在天空的映衬下宛如指向天空的手指。
例句:A balloon floated across the sky.
翻译:气球飘过天空。
例句:A bolt of lightning lit up the sky.
翻译:(一道)闪电照亮了天空。
例句:A bright moving object appeared in the sky at sunset.
翻译:日落西山时,天空出现了一个移动的发亮物体。
例句:A bright rainbow arched above.
翻译:一弯明亮的彩虹悬挂在天空。

例子,更深入的一个遍历输出生成表格

 代码如下 复制代码

eader("content-type:text/html; charset=utf-8"); //设置编码
$xml = simplexml_load_file('a.xml'); //载入xml文件 $lists和xml文件的根节点是一样的
echo $xml->company."<br>";
echo $xml->town."<br>id:";
echo $xml->town['id']."<br>parent:";
echo $xml->town['parent']."<br>";

echo "<br>循环读取:<br>";
foreach($xml->user as $users){ //有多个user,取得的是数组,循环输出
    echo "-------------------<br>";
    echo "姓名:".$users->name."<br>";
    echo "编号:".$users->age."<br>";
    echo "性别:".$users->age['sex']."<br>";
    echo "序号:".$users->height."<br>";
}

echo "<br>循环读取:<br>";
foreach($xml->town as $towns){ //有多个user,取得的是数组,循环输出
    echo "-------------------<br>";
    echo "id:".$towns['id']."<br>";
    echo "归属:".$towns['parent']."<br>";
    echo "地区:".$towns."<br>";
}
 

 

sprintf()函数在php官方是说把字符串格式化输出了,下面我就来给各位朋友介绍一站长在学习sprintf()函数时的一些经验分享,希望此文章能给你带来帮助。


PHP函数 sprintf() 函数官方定义为:sprintf() :把格式式的字符串写入一个变量中

语法为:
sprintf(format,arg1,arg2,arg++);

参数:
format:必须,转换格式
arg1 :必须,规定插入 format 字符串中第一个%符号处的参数
arg1 :可选,规定插入 format 字符串中第二个%符号处的参数
arg1++:可选,规定插入 format 字符串中第三、四等%符号处的参数

参数 format 的转换格式,以百分比符号(%)开始到转换字符结束,下面是有可能的format值

%% – 返回百分比符号
%b – 二进制数
%c – 依照 ASCII 值的字符
%d – 带符号十进制数
%e – 可续计数法(比如 1.5e+3)
%u – 无符号十进制数
%f – 浮点数(local settings aware)
%F – 浮点数(not local settings aware)
%o – 八进制数
%s – 字符串
%x – 十六进制数(小写字母)
%X – 十六进制数(大写字母)

下面是一些demo:

 代码如下 复制代码
 
// 1. %% :把 %% 替换成 %
$str = '测试一下 %% 这个参数,会被替换成什么';
echo sprintf($str);
//返回结果: 测试一下 % 这个参数,会被替换成什么(%%被替换成一个%)
 
 
// 2. %b :该参数只能替换整型数据,如果是浮点型,只会取整数部分,会忽略小数点后面的数据。如果是非整型数据。www.111Cn.net返回 0
$str = '参数 %b 会替换成二进制数';
$arg = '10';
echo sprintf($str,$arg);
//返回结果:参数 1010 会替换成二进制数
$arg = 10.23;
echo sprintf($str,$arg);
//返回结果:参数 1010 会替换成二进制数
$arg = 'abc';
echo sprintf($str,$arg);
//返回结果:参数 0 会替换成二进制数
 
// 3. %c 返回字符编码的ASCII码
$arg = 65;
$str =  "数字 {$arg} 对应的ASCII码为 %c ";
echo sprintf($str,$arg);
//返回结果:数字 65 对应的ASCII码为 A
 
// 4. %d 将一段字符里的%d替换成int型,数据要求同 $b 相同
$str = 'ID号为 %d ';
$arg = -3;
echo sprintf($str,$arg);
//返回结果:ID号为 -3
$arg = 4.5;
echo sprintf($str,$arg);
//返回结果:ID号为 4
$arg = 'abc';
echo sprintf($str,$arg);
// www.111Cn.net返回结果:ID号为 0
 
// 5. %s - 字符串
$str = "这是用来测试的sprintf的字符串( %s )。今天消费了%f元。从钟楼到小寨有%d站。上班";
$arg = '%s';
echo sprintf($str,$arg,6,5);
//返回结果:这是用来测试的sprintf的字符串( %s )。今天消费了6.000000元。从钟楼到小寨有5站。上班

至于其它的参数。大家可以试着测试一下.

下面说一下这个函数的一些用途。比如我们在对一张数据表所有数据做多个字段更新时。如果使用循环更新的话。那是很耗费资源的。这里就要用到我们sprintf()函数了。
在数据库批量更新时。我一般采用 case then when end 的语法来做。基本语法如:

 代码如下 复制代码
 
UPDATA table
    SET field = CASE id
        WHEN 1 THEN 'value1'
        WHEN 2 THEN 'value2'
        WHEN 3 THEN 'value3'
    END
WHERE id IN (1,2,3)

上面的意思就是说。更新 table 设置 id = 1 的值为 value1, id = 2 的值为 value2 , id = 3 的值为 value3 .这样参数上面的函数将sql语句结合成这样SQL语句。只需一条SQL就可以进行批量更新。具体的方法为:
 

 代码如下 复制代码
//比如 id 对应的值为以下数组
$info = array(1=>'张三',2=>'李四',3=>'王五');
$ids = implode(',',array_keys($info)) //获取所有的ID字符串
//组合SQL
$sql = "UPDATA user SET username = CASE id";
foreach($info as $id=>$username){
     $sql .= sprintf("WHEN %d THEN %s",$id,$username);
}
$sql .= "END WHERE id IN ($ids)";
// $model->query($sql)

上面就可以完成批量更新的操作。后面的 where子句确保只有3行数据执行

根据本人经验如果在使用php函数或方法出现Call to undefined function curl_init”错误提醒时就是php.ini中配置文件没有配置好了,解决方法也非常的简单

XAMPP打开CURL的方法:

修改 X:/xampp/php/php.ini文件
查找如下代码,大约在952行,XAMPP版本不同可能有点小区别,用编辑器查找就行

;extension=php_curl.dll

将其前面的分号去掉,然后重启Apache,搞定。


如果还是不行我们要注意一点是:要保证php_curl.dll 复制到php安装目录下的ext下,libeay32.dll和ssleay32.dll复制到php安装目录下。(我的配置文件是system32,和php5ts.dll一个地)

 

在php5.4版本之前如果想让json支持中文我们需要进行一些转换操作,如使用json_encode中文的话会转换成像\\u4e2d\\u6587类的编码了,但有了JSON_UNESCAPED_UNICODE之后直接不转码输出中文,下面我们给大家具体测试一下。

用PHP的json_encode来处理中文的时候, 中文都会被编码, 变成不可读的, 类似”u***”的格式, 还会在一定程度上增加传输的数据量.

 代码如下 复制代码

<?php
echo json_encode("中文"); //Output: "u4e2du6587"


这就让我们这些在天朝做开发的同学, 很是头疼, 有的时候还不得不自己写json_encode.

而在PHP5.4, 这个问题终于得以解决, Json新增了一个选项: JSON_UNESCAPED_UNICODE, 故名思议, 就是说, Json不要编码Unicode.

看下面的例子:

 代码如下 复制代码

<?php
echo json_encode("中文", JSON_UNESCAPED_UNICODE); //Output: "中文"


怎么样, 是不是让大家很开心的改动?

呵呵, 当然, Json在5.4还加入了: JSON_BIGINT_AS_STRING, JSON_PRETTY_PRINT, JSON_UNESCAPED_SLASHES等选项,

用了好几年啦!觉得挺好的一个调试程序,主要是调用php的内部函数print_r(),其实print_r就是用来调试用的,只是有些地方不够好了,下面我来自定义一个函数可以满足我们的需求,下面大家一起来看看。

比如缩进关系,每次写还要在前面加上echo "<pre>" ,其实这很不爽的!还有内部的var_dump(),反正效果不怎么理想的,所以就自己写了这个,在配置文件中加上此函数、每次调用只要dump($var) $var不管是变量、数组、类库都能打印出来——爽呀!

 

 代码如下 复制代码
/**
 * 输出变量的内容,通常用于调试
 * @package Core
 * @param mixed $vars 要输出的变量
 * @param string $label
 * @param boolean $return
 */
function dump($vars, $label = '', $return = false) {
    if (ini_get('html_errors')) {
        $content = "<pre>n";
        if ($label != '') {
            $content .= "<STRONG>{$label} :</STRONG>n";
        }
        $content .= htmlspecialchars(print_r($vars, true));
        $content .= "n<pre>n";
    }else {
        $content = $label . " :n" . print_r($vars, true);
    }
    if($return) {
        return $content;
    }else {
        echo $content;
        return null;
    }
}

/**
 ** 温馨提示:本站所有文章均来自PHPma精心编辑,99%原创,转帖之人需保留本站的链接
 ** 本站所有文章仅代表本人观点,转帖概不负责

 **/

[!--infotagslink--]

相关文章

  • php正确禁用eval函数与误区介绍

    eval函数在php中是一个函数并不是系统组件函数,我们在php.ini中的disable_functions是无法禁止它的,因这他不是一个php_function哦。 eval()针对php安全来说具有很...2016-11-25
  • php中eval()函数操作数组的方法

    在php中eval是一个函数并且不能直接禁用了,但eval函数又相当的危险了经常会出现一些问题了,今天我们就一起来看看eval函数对数组的操作 例子, <?php $data="array...2016-11-25
  • Python astype(np.float)函数使用方法解析

    这篇文章主要介绍了Python astype(np.float)函数使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-06-08
  • 图解PHP使用Zend Guard 6.0加密方法教程

    有时为了网站安全和版权问题,会对自己写的php源码进行加密,在php加密技术上最常用的是zend公司的zend guard 加密软件,现在我们来图文讲解一下。 下面就简单说说如何...2016-11-25
  • Python中的imread()函数用法说明

    这篇文章主要介绍了Python中的imread()函数用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-16
  • C# 中如何取绝对值函数

    本文主要介绍了C# 中取绝对值的函数。具有很好的参考价值。下面跟着小编一起来看下吧...2020-06-25
  • C#学习笔记- 随机函数Random()的用法详解

    下面小编就为大家带来一篇C#学习笔记- 随机函数Random()的用法详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
  • ps怎么使用HSL面板

    ps软件是现在很多人都会使用到的,HSL面板在ps软件中又有着非常独特的作用。这次文章就给大家介绍下ps怎么使用HSL面板,还不知道使用方法的下面一起来看看。 &#8195;...2017-07-06
  • Plesk控制面板新手使用手册总结

    许多的朋友对于Plesk控制面板应用不是非常的了解特别是英文版的Plesk控制面板,在这里小编整理了一些关于Plesk控制面板常用的使用方案整理,具体如下。 本文基于Linu...2016-10-10
  • 金额阿拉伯数字转换为中文的自定义函数

    CREATE FUNCTION ChangeBigSmall (@ChangeMoney money) RETURNS VarChar(100) AS BEGIN Declare @String1 char(20) Declare @String2 char...2016-11-25
  • 使用insertAfter()方法在现有元素后添加一个新元素

    复制代码 代码如下: //在现有元素后添加一个新元素 function insertAfter(newElement, targetElement){ var parent = targetElement.parentNode; if (parent.lastChild == targetElement){ parent.appendChild(newEl...2014-05-31
  • Android开发中findViewById()函数用法与简化

    findViewById方法在android开发中是获取页面控件的值了,有没有发现我们一个页面控件多了会反复研究写findViewById呢,下面我们一起来看它的简化方法。 Android中Fin...2016-09-20
  • 使用GruntJS构建Web程序之构建篇

    大概有如下步骤 新建项目Bejs 新建文件package.json 新建文件Gruntfile.js 命令行执行grunt任务 一、新建项目Bejs源码放在src下,该目录有两个js文件,selector.js和ajax.js。编译后代码放在dest,这个grunt会...2014-06-07
  • 使用percona-toolkit操作MySQL的实用命令小结

    1.pt-archiver 功能介绍: 将mysql数据库中表的记录归档到另外一个表或者文件 用法介绍: pt-archiver [OPTION...] --source DSN --where WHERE 这个工具只是归档旧的数据,不会对线上数据的OLTP查询造成太大影响,你可以将...2015-11-24
  • 如何使用php脚本给html中引用的js和css路径打上版本号

    在搜索引擎中搜索关键字.htaccess 缓存,你可以搜索到很多关于设置网站文件缓存的教程,通过设置可以将css、js等不太经常更新的文件缓存在浏览器端,这样访客每次访问你的网站的时候,浏览器就可以从浏览器的缓存中获取css、...2015-11-24
  • C++中 Sort函数详细解析

    这篇文章主要介绍了C++中Sort函数详细解析,sort函数是algorithm库下的一个函数,sort函数是不稳定的,即大小相同的元素在排序后相对顺序可能发生改变...2022-08-18
  • PHP用strstr()函数阻止垃圾评论(通过判断a标记)

    strstr() 函数搜索一个字符串在另一个字符串中的第一次出现。该函数返回字符串的其余部分(从匹配点)。如果未找到所搜索的字符串,则返回 false。语法:strstr(string,search)参数string,必需。规定被搜索的字符串。 参数sea...2013-10-04
  • jQuery 1.9使用$.support替代$.browser的使用方法

    jQuery 从 1.9 版开始,移除了 $.browser 和 $.browser.version , 取而代之的是 $.support 。 在更新的 2.0 版本中,将不再支持 IE 6/7/8。 以后,如果用户需要支持 IE 6/7/8,只能使用 jQuery 1.9。 如果要全面支持 IE,并混合...2014-05-31
  • PHP函数分享之curl方式取得数据、模拟登陆、POST数据

    废话不多说直接上代码复制代码 代码如下:/********************** curl 系列 ***********************///直接通过curl方式取得数据(包含POST、HEADER等)/* * $url: 如果非数组,则为http;如是数组,则为https * $header:...2014-06-07
  • php中的foreach函数的2种用法

    Foreach 函数(PHP4/PHP5)foreach 语法结构提供了遍历数组的简单方式。foreach 仅能够应用于数组和对象,如果尝试应用于其他数据类型的变量,或者未初始化的变量将发出错误信息。...2013-09-28