89、PHP与XML技术结合使用解析

阅读() @2019-05-12 11:46:37

XML作为一种用来跨平台的通用语言,越来越受重视。XML是一种标准化的文本格式,可以在web上表示结构化信息,利用它可以存储有复杂结构的诗句信息,XML是HTML的补充,但XML并不是HTML的替代品,在将来的网页开发中,XML将被用来描述、存储数据,而HTML是用来格式化和显示数据的。

随着HTML的不断发展,W3C组织意识到HTML存在一些无法避免的问题:

1、不能解决所有解释数据的问题,例如影音文件或化学公式、音乐符号等其他形式的内容;

2、效能问题,需要下载整份文件才能对文件做搜寻的动作;

3、扩充性、弹性、易读性都不佳。

下面是XML语言的特点:

1、XML是一种元标记语言,所谓“元标记语言”,是指开发者可以根据需要定义自己的标记,例如,开发者可以定义标记<book><name>,任何满足XML命名规则的名称都可以作为标记,这就为不同应用程序的应用打开了大门;

2、允许通过使用自定义格式,表示、交换和处理出具库可以理解的数据;

3、基于文本的格式,允许开发人员描述结构化数据并在各种应用之间发送和交换这些数据;

4、有助于服务器之间传输结构化数据;

5、XML使用的是非专有的格式,不受版权、专利、商业秘密或是其他种类的知识产权的限制,XML的功能是非常强大的,同时对于人类或是计算机程序来说都容易阅读和编写,因而成为交换语言的首选,网络带给人类的最大好处是信息共享,在不同的计算机值ijianfasong数据,而XML用来告诉我们“数据是什么”,利用XML可以在网络上交换任何信息。

例如一个XML文件中的代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<电器>
	<电器1>
		<名字>电视机</名字>
		<生产时间>2017年1月20日</生产时间>
	</电器1>
	<电器2>
		<名字>电冰箱</名字>
		<生产时间>2017年1月20日</生产时间>
	</电器2>
	<电器3>
		<名字>手电筒</名字>
		<生产时间>2017年1月20日</生产时间>
	</电器3>
</电器>

XML语法基础

1、XML文档的组成和声明:

一个完整的XML文档由声明、元素、注释、字符引用和处理指令组成,所有这些XML文档的组成部分都是通过元素标记来指明的。

XML生命必须作为XML文档的第一行,前面不能有空白、注释或其他的处理指令,完整的声明格式如下:

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

2、XML元素介绍:

(1)元素类别:

在XML文档中,元素分为非空元素和空元素两种类型,一个XML非空元素是由开始标记、结束标记和标记之间的数据构成的。

<开始标记>标记内容</结束标记>

而空元素就是不包含任何内容的元素,例如:

<开始标记></结束标记>

非空元素还可以这样表示:

<开始标记 content="标记内容"></结束标记>

(2)元素命名规范:

a、元素名中可以包含字母、数字和其他字符,虽然可以包含中文,但是在不支持中文的环境中将不能够解释包含中文字符的XML文档;

b、元素名中不能以数字或标点符号开头;

c、元素命中不能包含空格。

3、实体引用:

XML元素内容中不能包含“<”、“>”等内容,因为XML不知道标签的结尾从哪里开始。

要解决这个问题,就要使用实体引用,如下:

“<”为"&lt;"
“>”为"&gt;"
“&”为"&amp;"
“ ' ”为"&apos;"
“ " ”为"&qout;"

例如:

<ok>2 &rt; 1</ok>

4、XML命名空间:

如果一个XML文档中出现了HTML文档中才出现的元素名称,如:

<body>
      <form></form>
</body>

则浏览器在解析的时候会出错,不知道到底是按照XML还是HTML进行解析,要解决这个问题,可以使用名称前缀:

<s:body>
      <s:form></s:form>
</s:body>

在PHP中创建XML文档

XML是标记语言,PHP是脚本语言,使用脚本语言是可以创建标识语言的。

在网站中建立文件xml.php,输入以下代码:

header('Content-type:text/xml;charset="utf-8"');

echo '<?xml version="1.0" encoding="utf-8" ?>';
echo '<商品>';
echo '<名字>赵一鸣PHP学习笔记</名字>';
echo '<时间>2017年1月1日</时间>';
echo '</商品>';

运行这个文件,即可看到效果。

使用SimpleXML扩展

以上通过PHP创建xml文档是静态方法,如果想要从获得的数据中动态创建或者读取XML文件,应该使用什么方式呢?最简单的方法就是使用PHP中提供的SimpleXML扩展。

header('Content-type:text/xml;charset="utf-8"');

$xmldoc =  '<?xml version="1.0" encoding="utf-8" ?>';
$xmldoc .= '<商品>';
$xmldoc .= '<名字>赵一鸣PHP学习笔记</名字>';
$xmldoc .= '<时间>2017年1月1日</时间>';
$xmldoc .= '</商品>';

$simpleXmlObj = new SimpleXMLElement($xmldoc);
echo $simpleXmlObj->asXML();

更改以上最后一行代码为:

echo $simpleXmlObj->asXML(‘a.xml’);

给类方法asXML()添加参数a.xml,运行php文件,可以在该网页的同目录下得到文件a.xml。

访问XML特定节点元素和属性

通过simplexml类方法addAttribute和addChild添加XML元素和属性,具体步骤如下:

<?php

    header('Content-type:text/xml;charset="utf-8"');
    
    $xmlObj = simplexml_load_file('test.xml');
    $xmlObj->addAttribute('english', 'electrical');
    
    $xmlObj->asXML('b.xml');

查看生成的b.php中的代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<电器 english="electrical">
	<电器1>
		<名字>电视机</名字>
		<生产时间>2017年1月20日</生产时间>
	</电器1>
	<电器2>
		<名字>电冰箱</名字>
		<生产时间>2017年1月20日</生产时间>
	</电器2>
	<电器3>
		<名字>手电筒</名字>
		<生产时间>2017年1月20日</生产时间>
	</电器3>
</电器>

simplexml_load_file()加载xml文件,通过类方法addAttribute()在跟元素添加属性。

动态创建XML文档

使用SimpleXML对象可以十分方便的读取和修改XML文档,但是无法动态建立XML,如果想动态的创建XML文档,需要使用DOM来实现,DOM是文档对象模型,是W3C组织推荐的处理可扩展标志语言的标准编程接口。

下面是使用DOM动态创建XML文档的方法:

<?php

    $dom = new DOMDocument('1.0', 'utf-8');//创建DOM对象
    
    $store = $dom->createElement('store');//创建store节点
    $dom->appendChild($store);//将节点插入dom中

    $album = $dom->createElement('album');
    $albumAttr = $dom->createAttribute('catalog');//创建属性
    $albumAttr->value = 'song';//给属性赋值
    $album->appendChild($albumAttr);//将属性插入到节点中
    $store->appendChild($album);

    $name = $dom->createElement('name');//创建普通节点
    $nameVal = $dom->createTextNode('天地一斗');//创建文本节点
    $name->appendChild($nameVal);//将文本节点插入到普通节点中
    $album->appendChild($name);

    $author = $dom->createElement('author');
    $authorVal = $dom->createTextNode('jay');
    $author->appendChild($authorVal);
    $album->appendChild($author);

    $heading = $dom->createElement('heading');
    $headingVal = $dom->createTextNode('周杰伦专辑');
    $heading->appendChild($headingVal);
    $album->appendChild($heading);

    /*//第一种方法:保存为d.xml文件
    header('Content-type:text/html;charset="utf-8"');
    $dom->save('d.xml');*/

    //第二种方法:本页面直接打开
    header('Content-type:text/xml');
    echo $dom->savexml();

持续更新中!

微信二维码
锐壳主机