1、什么是XML
2、XML与HTML的不同
3、为什么要使用xml
4、怎么使用xml
XML(Extensible Markup Language)即可扩展标记语言,它与HTML一样,
都是SGML(Standard Generalized Markup Language,标准通用标记语言)。
Xml是Internet环境中跨平台的,依赖于内容的技术,是当前处理结构化文档信息的有力工具。
扩展标记语言XML是一种简单的数据存储语言,使用一系列简单的标记描述数据,
而这些标记可以用方便的方式建立,虽然XML占用的空间比二进制数据要占用更多的空间,
但XML极其简单易于掌握和使用。
XML和HTML的不同可以归纳为3点:
① XML扩展性比HTML强
XML(Extensible Markup Languages)是扩展标记语言的英语缩写,
他可以创建个性化的标记语言,可以称之为元语言。XML的标记语言可以自定义,
这样可以提供更多的数据操作,而不像HTML一样,只能局限于按一定的格式在终端显示出来。
HTML的功能只有浏览器放入显示和打印,仅仅适合静态网页的要求。
② XML的语法比HTML严格
由于XML的扩展性强,它需要稳定的基础规则来支持扩展。它的严格规则为:
1、起始和结束的标签相匹配
2、嵌套标签不能相互嵌套
3、区分大小写
相对应XML的严格规则,HTML语言并没有规定标签的绝对位置,也不区分大小写,
而这些全部由浏览器来完成识别和更正。
③ XML与HTML互补
XML可以获得应用之间的相应信息,提供终端的多项处理要求,也能被其他的解析器和工具所使用,
在现阶段,XML可以转化成相应的HTML,来适应当前浏览器的需求。
为什么要使用xml
1、数据交换
2、信息存储,内容管理
3、XML 文件易读且结构清楚合理
我们把符合 XML 语法的文档称为形式良好的 XML 文档,比如:
* 它必须以 XML 声明开头
* 它必须拥有唯一的根元素
* 开始标签必须与结束标签相匹配
* 元素对大小写敏感
* 所有的元素都必须关闭
* 所有的元素都必须正确地嵌套
* 必须对特殊字符使用实体
在XML中,采用了如下的语法:
1 任何的起始标签都必须有一个结束标签。
2 可以采用另一种简化语法,可以在一个标签中同时表示起始和结束标签。
这种语法是在大于符号之前紧跟一个斜线(/),例如<tag />。
XML解析器会将其翻译成<tag></tag>。
3 标签必须按合适的顺序进行嵌套,所以结束标签必须按镜像顺序匹配起始标签,
例如this is a samplestring。
这好比是将起始和结束标签看作是数学中的左右括号:在没有关闭所有的内部括号之前,
是不能关闭外面的括号的。
4 所有的属性都必须有值。
5 所有的属性都必须在值的周围加上双引号。
学习目标
掌握DOM方式解析XML,
掌握DOM方式创建XML
掌握simplexml方式解析xml
了解SAX方式解析XML
XML与HTML的设计区别是:
XML是用来存储数据的,重在数据本身。而HTML是用来定义数据的,重在数据的显示模式
DTD:(Document type define)文档类型定义
结构良好的XML文档
如果某个文档符合XML语法规范,那么我们就说这个文档是“结构良好”的文档
有效的XML文档
所谓有效的XML文档是指通过了DTD的验证的,具有良好结构的XML文档,
在此大家要明白 XML文档可分为结构良好的XML文档和有效的XML文档,以及他们之间的关系。
即具有结构良好的XML文档并不一定就是有效的XML文档,
反之一个有效的XML文档必定是一个结构良好的XML文档。
XML 的优势有以下六个方面
1 XML可以从HTML中分离数据
2 XML用于交换数据
3 XML和B2B (business)
4 XML可以用于共享数据
5 XML可以充分利用数据
6 XML可以用于创建新的语言
DOM方式解析XML
$dom = new DOMdocument('1.0','utf-8');
$dom -> load('./book.xml');
//***获取具体节点信息
$mm = $dom -> getElementsByTagName('mm');
var_dump($mm -> item(1)-> nodeValue);
//***获取多个节点信息
$authors = $dom -> getElementsByTagName('author');
foreach($authors as $author){
$mm = $author -> getElementsByTagName('mm');
echo $mm -> item(0) -> nodeValue;
}
exit;
//***解析xml全部节点信息
$data = array();//使用该数组变量接收信息
/**
$data[1]['introduce'] = '主要介绍ZendFramework,作者代码值得学习';
$data[1]['author']['mm'] = '章鱼';
$data[1]['author']['nn'] = '带鱼';
$data[2]['introduce'] = '深入设计模式、PHP标准库和JSON';
$data[2]['author']['mm'] = '鳄鱼';
$data[2]['author']['nn'] = '鲨鱼';
*/
$books = $dom -> getElementsByTagName('book');
foreach($books as $book){
$no = $book -> getAttribute('no');//获得一维xml信息编号
//获得nn信息
$nn = $book -> getElementsByTagName('nn');
$nn_value = $nn -> item(0) -> nodeValue;
$data[$no]['author']['nn'] = $mm_value;
//获得mm信息
$mm = $book -> getElementsByTagName('mm');
$mm_value = $mm -> item(0) -> nodeValue;
$data[$no]['author']['mm'] = $mm_value;
//获得introduce信息
$introduce = $book -> getElementsByTagName('introduce');
$introduce_value = $introduce -> item(0) -> nodeValue;
$data[$no]['introduce'] = $introduce_value;
}
print_r($data);
exit;
DOM方式创建XML
核心方法:
createElement 创建元素
createTextNode 创建内容
appendChild 追加节点
$book = array();
$data[] = array(
'title' => 'java book',
'author' => array(
'one' => 'gaoqian',
'two' => 'lihongqiang',
),
'desn' => "very good !!!"
);
$data[] = array(
'title' => 'php oop',
'author' => array(
'one' => 'sunwen',
'two' => 'gulong',
),
'desn' => "good very good"
);
$doc = new DOMDocument('1.0','utf-8');
$doc->formatOutput = true;//输出内容时自动格式化代码
$r = $doc->createElement("books");
$doc->appendChild($r);//为xml文档追加子节点
foreach($data as $_v){
$book = $doc -> createElement('book');
$title = $doc -> createElement('title');
$title_text = $doc -> createTextNode($_v['title']);
$title -> appendChild($title_text);//将节点内容添加到节点
$book -> appendChild($title);//将节点添加到对应的上级节点上
$desn = $doc -> createElement('desn');
$desn_text = $doc -> createTextNode($_v['desn']);
$desn -> appendChild($desn_text);//将节点内容添加到节点
$book -> appendChild($desn);//将节点添加到对应的上级节点上
$author = $doc -> createElement('author');//创建author节点
$one = $doc -> createElement('one');
$one_text = $doc -> createTextNode($_v['author']['one']);
$one -> appendChild($one_text);
$author -> appendChild($one);
$two = $doc -> createElement('two');
$two_text = $doc -> createTextNode($_v['author']['two']);
$two -> appendChild($two_text);
$author -> appendChild($two);
$book -> appendChild($author);//将节点追加到上级节点
$r -> appendChild($book);//将book追加到根节点
}
$xml = $doc->saveXML();
file_put_contents('./data.xml',$xml);
SimpleXml方式解析xml
simplexml_load_string //echo $str->book->introduce;
simplexml_load_file('./book.xml'); //echo $xml -> book[0] -> introduce;
<bawei>
<student>
<name>pujing</name>
<xueli>大学</xueli>
<detail>
<hobby>篮球</hobby>
<qq>78297398</qq>
<sex>man</sex>
</detail>
</student>
<student>
<name>aobama</name>
<xueli>初中</xueli>
<detail>
<hobby>高尔夫</hobby>
<qq>977655</qq>
<sex>man</sex>
</detail>
</student>
</bawei>
$student[0] = array(
'name' => 'pujing',
'xueli' => '大学',
'detail' => array(
'hobby' => '篮球',
'qq' => '7823232',
'sex' => 'man',
)
);
$student[1] = array(
'name' => 'aobama',
'xueli' => '初中',
'detail' => array(
'hobby' => '高尔夫',
'qq' => '977232283',
'sex' => 'man',
)
);