在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
最近处理一些配置文件,碰到了YAML格式的文件,因为之前没接触过此格式的文件,对于XML还比较熟悉一些。那么什么是YAML呢?它相比XML又有哪些优缺点呢?什么情况下用YAML呢?YAML怎么使用呢?在此做一个简单的总结吧。咱们就先从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] |
请发表评论