迩来处理一些设置文件,碰到了YAML格式的文件,由于之前没打仗过此格式的文件,对于XML还比较认识一些。那么什么是YAML呢?它相比XML又有哪些优缺点呢?什么情况下用YAML呢?YAML怎么利用呢?在此做一个简单的总结吧。咱们就先从XML来说吧。
相信XML各人都比较熟知吧。下面是我从网络上摘取的概念性的东西,各人可以看一下。在此就不多说了。更多的说一些基本用法。
XML概述:
可扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有布局性的标记语言,可以用来标记数据、界说数据类型,是一种答应用户对本身的标记语言举行界说的源语言。 XML是标准通用标记语言 (SGML) 的子集,非常得当 Web 传输。XML 提供同一的方法来形貌和互换独立于应用步伐或供应商的布局化数据。
格式特性:
XML与Access,Oracle和SQL Server等数据库不同,数据库提供了更强有力的数据存储和分析本领,例如:数据索引、排序、查找、相关一致性等,XML仅仅是存储数据。毕竟上XML与其他数据体现情势最大的不同是:它极其简单,这是一个看上去有点琐细的长处,但正是这点使XML与众不同。
XML与HTML的计划区别是:XML被计划为传输和存储数据,其核心是数据的内容。而HTML被计划用来表现数据,其核心是数据的表面。HTML旨在表现信息,而 XML旨在传输信息。
XML和HTML语法区别:HTML的标记不是全部的都须要成对出现,XML则要求全部的标记必须成对出现;HTML标记不区分大小写,XML则大小敏感,即区分大小写。
读写:
XML读写我所认识的有两种方式,一种是通过JavaScript来获取XML值,一个是用PHP来读取。XML的编写各人可以参考动手册,XML格式比较自由,可以自界说标签,但有一个原则就是要直观。下面直接枚举出示例供各人测试,如有标题各人可以交换。
note.xml
复制代码 代码如下:
<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<from>John</from>
<to>George</to>
<message>Don't forget the meeting!</message>
</note>
xml_test.html
JavaScript
复制代码 代码如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmls="http://www.w3.org/1999/xhtml">
<body>
<p>
<b>To:</b> <span id="to"></span><br />
<b>From:</b> <span id="from"></span><br />
<b>Message:</b> <span id="message"></span>
</p>
<script type="text/javascript">
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.open("GET","note.xml",false);
xmlhttp.send();
xmlDoc=xmlhttp.responseXML;
document.getElementById("to").innerHTML=
xmlDoc.getElementsByTagName("to")[0].childNodes[0].nodeValue;
document.getElementById("from").innerHTML=
xmlDoc.getElementsByTagName("from")[0].childNodes[0].nodeValue;
document.getElementById("message").innerHTML=
xmlDoc.getElementsByTagName("message")[0].childNodes[0].nodeValue;
</script>
</body>
</html>
xml_test.php
复制代码 代码如下:
<?php
//创建DOM对象
$xml = new DOMDocument();
//读取XML文件
$xml = simplexml_load_file('note.xml');
//输出XML文件中from属性,多个相同属性也就是数组的情势,可以用下标来取值
echo $xml->from;
?>
YAML简介:
YAML 作为一种比 XML 更为简单易读的序列化语言,正越来越多地被用于应用及设置文件的开发中。本文将简单介绍 YAML 的现状,YAML 与 XML 相比的优劣势,并通过实际的例子给出 YAML 的典范应用场景及其利用方法(涵盖 c/c++、ruby、PHP等)。
上风:
YAML的可读性好。
YAML和脚本语言的交互性好。
YAML利用实现语言的数据类型。
YAML有一个一致的信息模子。
YAML易于实现。
上面5条也就是XML不足的地方。同时,YAML也有XML的下列长处:
YAML可以基于流来处理;
YAML表达本领强,扩展性好。
总之,YAML试图用一种比XML更敏捷的方式,来完成XML所完成的任务。
更多的内容及规范拜见http://www.yaml.org。
语法:
Structure通过空格来展示。Sequence里的项用”-”来代表,Map里的键值对用”:”分隔.
这几乎就是全部的语法了.
好比……
一样平常YAML文件扩展名为.yaml。好比:john.yaml
复制代码 代码如下:
name: John Smith
age: 37
spouse:
name: Jane Smith
age: 25
children:
- name: Jimmy Smith
age: 15
- name: Jenny Smith
age 12
John本年37岁,有一个幸福的四口之家。两个孩子Jimmy 和Jenny活泼可爱。老婆Jane年轻美貌。
如果深入研究的话还大概发现一些社会标题^_^。
可见YAML的可读性是不错。
读写:
PHP对于YAML的读写,我推荐利用Spyc类读写YAML文件。
Spyc类文件下载地址:
https://github.com/mustangostang/spyc/
Spyc只有2个类方法可供利用,一个是读取YAML文件,一个是生成YAML文件格式。下面从这个两种方法介绍下。
复制代码 代码如下:
include('spyc.php');
// 读取YAML文件,生成数组
$yaml = Spyc::YAMLLoad('spyc.yaml');
// 将数组转换成YAML文件
$array['name'] = 'andy';
$array['site'] = '21andy.com';
$yaml = Spyc::YAMLDump($array);
php.ini读取ini的剖析方式那种设置没法支持多维数组,So,我对yaml生成多维数组很感爱好,主要想做一下设置文件,如下:
复制代码 代码如下:
- { row: 0, col: 0, func: {tx: [0, 1]} }
转为php多维数组如下:
test.yaml(这个例子是我的DB设置文件,猛烈推荐利用!)
复制代码 代码如下:
DB:
default:
dsn: 'mysql:dbname=test;host=127.0.0.1'
user: 'root'
pass: '111'
session:
dsn: 'mysql:dbname=test;host=127.0.0.1'
user: 'root'
pass: '111'
test.php
复制代码 代码如下:
<?php
include('spyc.php');
//读取YAML文件,生成数组
$yaml = Spyc::YAMLLoad('test.yaml');
echo "<pre>";
print_r($yaml);
echo "</pre>";
PHP code
Array
(
[DB] => Array
(
[default] => Array
(
[dsn] => mysql:dbname=test;host=127.0.0.1
[user] => root
[pass] => 111
)
[session] => Array
(
[dsn] => mysql:dbname=test;host=127.0.0.1
[user] => root
[pass] => 111
)
)
)
PHP生成YAML文件示例:
<?php
include('spyc.php');
//将数组转换成YAML文件格式
$array['name'] = 'PHP步伐猿的笔记';
$array['site'] = 'www.songchaoke.cn';
$yaml = Spyc::YAMLDump($array);
//将转换的YAML写入到文件中
$f = fopen('test2.yaml',"w+");
fwrite($f,$yaml);
fclose($f);
[/code] |