一、1、XML 被称为“web领域的世界语”。xml(EXtensible Markup Language)可扩展性标记语
言:(用户可以自定义标签)
2、xml发展
当 XML(扩展标记语言)于 1998 年 2 月被引入软工业界时,它给整个行业带来了一场风暴。有
史以来第一次,这个世界拥有了一种用来结构化文档和数据的通用且适应性强的格式,它不仅仅可
以用于 WEB,而且可以被用于任何地方” —万维网标准之王Jeffrey Zeldman(杰夫·齐曼)
3、XML是什么?
XML(可扩展性标记语言),是独立于软件和硬件的信息传输工具
XML是一种标记语言(标签语言),很类似于HTML
XML的设计宗旨是传输数据,而非显示数据
XML的标签没有被预定义,所以需要自行定义标签
4、HTML超文本标记语言(超出文本表示的范围)
5、XML 和 HTML的差异
XML不是HTML的替代,而是对HTML的补充,XML用于传输数据,而HTML用于格式化并显示数据
XML 与 HTML为不同的目的而设置
XML被设计为传输和存储数据,其焦点是数据的内容
HTML被设计用来显示数据,其焦点是数据的外观
XML 旨在传输信息,而HTML旨在显示信息
HTML的发展:html->xhtml->html5
6、XML文档的结构:树状结构
XML文档形成了一种树状结构,他从根部开始,然后扩展到枝叶
XML文档必须包含根元素,该元素是所有元素的父元素
7、XML用途:
(1)存储和传输数据
(2)作为小型数据库使用。保存数据
(3)将某些项目的配置文件保存到XML中,作为项目的配置文件使用
8、XML的语法规则
所有XML元素都必须有闭合标签
XML标签对大小写敏感
XML标签必须正确的嵌套
XML文档必须有根元素,必须有且只有一个根元素
XML的属性值需加引号,建议使用双引号
XML中的注释(<!—注释内容 ?)
如果XML中有特殊字符,需要实体引用
< ----- <
> ----- >
& ----- &
‘ ----- '
“ ----- "
二、php通过DOM读取xml文件
DOMDocument 操作整个节点树
DOMElement 操作DOM节点树中某个元素节点
DOMNodeList 操作DOM节点树中某些元素(节点)的集合
(1)实例化当前需要的对象(DOMDocument对象)
(2)解析xml文件(load方法)
(3)通过标签名找元素(getELementsByTagName())
(4)通过DOMNodeLIst对象的item()方法根据索引(0开始)获得某个节点
(5)如果下面还有子元素,继续调用getElementsByTagName(),一直找到某个具体的元素
(6)在通过nodeValue获得其职
例:<?php
//1.实例化对象,参数1版本号(xml的版本号)2编号
$doc = new DOMDocument('1.0','utf-8');
//var_dump($doc);
//2该加载xml文件,在内存中生成一个节点树/树状图,首先要知道我们加载那个文件,使用
domdocument对象的load方法,参数就是xml文件名,返回一个布尔值,如果为真说明加载成功
$xml_file='a.xml';
$res = $doc->load($xml_file);
//var_dump($res);
/*现在php如何操作这个树状图呢?我们通过这个domdocument去操作它,方法是
getelmentsbytagname();返回的任然是一个对象,domnodelist,这个对象是一个集合类型的对
象,这个对象有length属性,表示有几个元素/节点,通过item方法可以获得指定的那个节点,主
意参数是这些元素的索引,下标,是从0开始的*/
$books=$doc->getElementsByTagName("book");//获取标签的信息,并非具体的值
//var_dump($books);
//var_dump返回数据类型
var_dump($books->length);//xml文件的长度
echo "<br>";
echo "<br>";
$book1=$books->item(1);//获得他得元素,tiem(0)就是第一行,第一个节点的全部内容
echo $book1->nodeValue;//nodeValue 属性,传回指定节点相关的文字,标题与作者
echo "<br>";
echo "<br>";
//3继续通过标签名获得元素/节点,要求:我要获得标题名,返回的依然是结合类型的对象
$title=$book1->getElementsByTagName('newtitle1');//获得第二行中title值
$title_1=$title->item(0);
//返回的还是domelement对象,通过这个对象的nodevalue方法可以获得这个文本节点的值
//$title_1=$book1->getElementsByTagName('title')->item(0);
var_dump($title_1->nodeValue);
//在php中文本空格等不算DOM节点
?>
三、如何通过PHP创建一个XML?
利用DOM在xml当中添加节点
(1)创建节点(DOMDocument::createElement),创建好节点之后,并不会添加到xml中。
(2)添加节点(DOMDocument::appendChild)
(3)保存xml(DOMDocument::save)
(4)利用(removeChild)进行节点的删除
(5)利用(replaceChild)进行节点的替换
注意:::节点操作都是对其子节点进行的操作,在进行节点操作之前要确定当前节点是谁!
思路:
(1)先在整个文档范围内创建一个节点
(2)给这个新建的节点增加内容
(3)确定节点的位置(关系)
(4)保存
不管是创建元素节点还是属性节点,创建的时候不去确定它的位置,所以是DOMDocument对象去创
建,创建完之后再去确定它的位置
例:
<?php
$doc=new DOMDocument('1.0',"utf-8");//创建DOM对象
$bookshelf=$doc->createElement('bookshelf');//创建一个book节点
$doc->appendChild($bookshelf);//把bookshelf添加到DOM对象中
$book=$doc->createElement('book');
$title=$doc->createElement('title');
$author=$doc->createElement('author');
$title->nodeValue='php加强';
$author->nodeValue='张三';
$book->appendChild($title);
$book->appendChild($author);
$id=$doc->createAttribute('id');//创建属性时不去给他赋值
$id ->value='book1';
$book->appendChild($id);
$bookshelf->appendChild($book);
$doc->formatOutput=true;//false横着排,true竖着排
$doc->save('fuxi2.xml');
?>
6、属性
1,parentNode当前节点的父节点
2,childNodes某个节点下的所有子节点
3,firstChild 第一个子节点
4,lastChild 最后一个子节点
5,previousSibling 前一个兄弟节点
6,nextSibling 后一个兄弟节点
例:
<?php
$doc=new DOMDocument('10','utf=8');
$doc->load('a.xml');
$books=$doc->getElementsByTagName('book')->item(1);
$childs=$books->childNodes->item(0);//childNodes某个节点下的所有子节点,这里获得的是
title
echo $childs->nodeValue;
$next=$childs->nextSibling;//nextSibling当前节点后的一个兄弟节点,这里获得作者
echo $next->nodeValue;
?>