XML和YAML的區別與使用方法

最近處理一些配置文件,碰到了YAML格式的文件,由於以前沒接觸過此格式的文件,對於XML還比較熟悉一些。那麼什麼是YAML呢?它相比XML又有哪些優缺點呢?什麼狀況下用YAML呢?YAML怎麼使用呢?在此作一個簡單的總結吧。我們就先從XML來講吧。javascript

相信XML你們都比較熟知吧。下面是我從網絡上摘取的概念性的東西,你們能夠看一下。在此就很少說了。更多的說一些基本用法。php

XML

概述:html

可擴展標記語言 (Extensible Markup Language, XML) ,用於標記電子文件使其具備結構性的標記語言,能夠用來標記數據、定義數據類型,是一種容許用戶對本身的標記語言進行定義的源語言。 XML是標準通用標記語言 (SGML) 的子集,很是適合 Web 傳輸。XML 提供統一的方法來描述和交換獨立於應用程序或供應商的結構化數據。java

格式特性:node

XML與Access,Oracle和SQL Server等數據庫不一樣,數據庫提供了更強有力的數據存儲和分析能力,例如:數據索引、排序、查找、相關一致性等,XML僅僅是存儲數據。事實上XML與其餘數據表現形式最大的不一樣是:它極其簡單,這是一個看上去有點瑣細的優勢,但正是這點使XML不同凡響。mysql

XML與HTML的設計區別是:XML被設計爲傳輸和存儲數據,其焦點是數據的內容。而HTML被設計用來顯示數據,其焦點是數據的外觀。HTML旨在顯示信息,而 XML旨在傳輸信息。c++

XML和HTML語法區別:HTML的標記不是全部的都須要成對出現,XML則要求全部的標記必須成對出現;HTML標記不區分大小寫,XML則大小敏感,即區分大小寫。git

讀寫:github

XML讀寫我所熟悉的有兩種方式,一種是經過JavaScript來獲取XML值,一個是用PHP來讀取。XML的編寫你們能夠參考着手冊,XML格式比較自由,能夠自定義標籤,但有一個原則就是要直觀。下面直接列舉出示例供你們測試,若有問題你們能夠交流。sql

note.xml

1 <?xml version="1.0" encoding="ISO-8859-1"?>
2 <note>
3   <from>John</from>
4   <to>George</to>
5   <message>Don't forget the meeting!</message>
6 </note>

xml_test.html

 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 2 <html xmls="http://www.w3.org/1999/xhtml">
 3 <body>
 4   <p>
 5     <b>To:</b> <span id="to"></span><br />
 6     <b>From:</b> <span id="from"></span><br />
 7     <b>Message:</b> <span id="message"></span>
 8   </p>
 9 <script type="text/javascript">
10 if (window.XMLHttpRequest)
11   {// code for IE7+, Firefox, Chrome, Opera, Safari
12   xmlhttp=new XMLHttpRequest();
13   }
14 else
15   {// code for IE6, IE5
16   xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
17   }
18   xmlhttp.open("GET","note.xml",false);
19   xmlhttp.send();
20   xmlDoc=xmlhttp.responseXML;
21 
22   document.getElementById("to").innerHTML=
23   xmlDoc.getElementsByTagName("to")[0].childNodes[0].nodeValue;
24   document.getElementById("from").innerHTML=
25   xmlDoc.getElementsByTagName("from")[0].childNodes[0].nodeValue;
26   document.getElementById("message").innerHTML=
27   xmlDoc.getElementsByTagName("message")[0].childNodes[0].nodeValue;
28 </script>
29 
30 </body>
31 </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

 1 name: John Smith
 2 
 3 age: 37
 4 
 5 spouse:
 6 
 7 name: Jane Smith
 8 
 9 age: 25
10 
11 children:
12 
13 - name: Jimmy Smith
14 
15 age: 15
16 
17 - name: Jenny Smith
18 
19 age 12

 

John今年37歲,有一個幸福的四口之家。兩個孩子Jimmy 和Jenny活潑可愛。妻子Jane年輕美貌。

若是深刻研究的話還可能發現一些社會問題^_^。

可見YAML的可讀性是不錯。

讀寫:

PHP對於YAML的讀寫,我推薦使用Spyc類讀寫YAML文件。

Spyc類文件下載地址:

https://github.com/mustangostang/spyc/

 

Spyc只有2個類方法可供使用,一個是讀取YAML文件,一個是生成YAML文件格式。下面從這個兩種方法介紹下。

1 include('spyc.php');
2 
3 // 讀取YAML文件,生成數組
4 $yaml = Spyc::YAMLLoad('spyc.yaml');
5 
6 // 將數組轉換成YAML文件
7 $array['name']  = 'andy';
8 $array['site'] = '21andy.com';
9 $yaml = Spyc::YAMLDump($array);

 

php.ini讀取ini的解析方式那種配置無法支持多維數組,So,我對yaml生成多維數組很感興趣,主要想作一下配置文件,以下:

  - { row: 0, col: 0, func: {tx: [0, 1]} }

轉爲php多維數組以下:

test.yaml(這個例子是個人DB配置文件,強烈推薦使用!

1 DB:
2   default:
3     dsn: 'mysql:dbname=test;host=127.0.0.1'
4     user: 'root'
5     pass: '111'
6   session:
7     dsn: 'mysql:dbname=test;host=127.0.0.1'
8     user: 'root'
9     pass: '111'

test.php

1 <?php
2 include('spyc.php');
3 //讀取YAML文件,生成數組
4 $yaml = Spyc::YAMLLoad('test.yaml');
5 echo "<pre>";
6 print_r($yaml);
7 echo "</pre>";

PHP code

 1 Array
 2 (
 3     [DB] => Array
 4         (
 5             [default] => Array
 6                 (
 7                     [dsn] => mysql:dbname=test;host=127.0.0.1
 8                     [user] => root
 9                     [pass] => 111
10                 )
11 
12             [session] => Array
13                 (
14                     [dsn] => mysql:dbname=test;host=127.0.0.1
15                     [user] => root
16                     [pass] => 111
17                 )
18 
19         )
20 
21 )

 

PHP生成YAML文件示例:

 1 <?php
 2 include('spyc.php');
 3 //將數組轉換成YAML文件格式
 4 $array['name']  = 'PHP程序猿的筆記';
 5 $array['site'] = 'www.songchaoke.cn';
 6 $yaml = Spyc::YAMLDump($array);
 7 //將轉換的YAML寫入到文件中
 8 $f = fopen('test2.yaml',"w+");
 9 fwrite($f,$yaml);
10 fclose($f);

 

 

概念性文字參考資料:http://baike.baidu.com/view/159832.htm?fromId=63

相關文章
相關標籤/搜索