发布于2026-07-22 阅读(0)
扫一扫,手机访问
最近处理配置文件时,遇到了YAML格式的文件。之前对XML比较熟悉,但YAML还是头一回接触。那么,YAML到底是什么?相比XML,它有哪些优缺点?什么场景下更适合用YAML?又该怎么用呢?下面系统地梳理一下,先从XML说起。
XML(可扩展标记语言)大家应该都不陌生。它是一种用于标记电子文件、使其具有结构性的标记语言,可以用来标记数据、定义数据类型,甚至允许用户自定义标签。XML是标准通用标记语言(SGML)的子集,非常适合在Web上传输数据——它提供了一种统一的方法来描述和交换独立于应用程序或供应商的结构化数据。
XML与Access、Oracle、SQL Server这类数据库不同:数据库提供了数据索引、排序、查找、一致性等强力的数据存储和分析能力,而XML仅仅是存储数据。事实上,XML与其他数据表现形式最大的区别在于它的“极其简单”——这听起来像是个琐碎的优点,但正是这一点让XML与众不同。
XML与HTML的设计目标也截然不同:XML被设计为传输和存储数据,焦点是数据的内容;HTML被设计为显示数据,焦点是数据的外观。HTML旨在展示信息,而XML旨在传输信息。语法上也有明显差异:HTML的标签不要求全部成对出现,XML则严格要求所有标记必须成对;HTML不区分大小写,XML则大小写敏感。
XML的读写,常用的有两种方式:一种是通过Ja vaScript获取XML值,另一种是用PHP来读取。编写XML时可以参考手册,格式比较自由,可以自定义标签,但原则是“直观”。下面直接给出示例,供读者测试。
note.xml
John George Don't forget the meeting!
xml_test.html - Ja vaScript 方式
To:
From:
Message:
xml_test.php - PHP 方式
from; ?>
YAML是一种比XML更简单易读的序列化语言,正越来越多地被用于应用及配置文件的开发中。下面简单介绍YAML的现状,它与XML相比的优劣势,并通过实际例子给出典型的应用场景及使用方法(涵盖C/C++、Ruby、PHP等)。
YAML的优势非常明显:
这5条恰好也是XML的不足。同时,YAML也继承了XML的以下优点:
说白了,YAML就是想用一种更敏捷的方式,来完成XML所承担的任务。
YAML的语法极其简洁:结构通过空格来展示,序列(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类。Spyc类只有两个主要方法:一个读取YAML文件,一个生成YAML格式字符串。下载地址:https://github.com/mustangostang/spyc/
基本用法示例:
include('spyc.php');
// 读取YAML文件,生成数组
$yaml = Spyc::YAMLLoad('spyc.yaml');
// 将数组转换成YAML格式
$array['name'] = 'andy';
$array['site'] = '21andy.com';
$yaml = Spyc::YAMLDump($array);
PHP的ini配置解析方式无法支持多维数组,而YAML可以轻松搞定。下面是一个多维数组的YAML示例:
- { row: 0, col: 0, func: {tx: [0, 1]} }
转为PHP多维数组后,结构清晰。再来看一个实际数据库配置文件的例子(强烈推荐使用):
test.yaml
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 读取该文件:
"; print_r($yaml); echo ""; ?>
输出结果:
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文件的示例:
以上便是YAML从概念到实践的完整梳理。如果对配置文件的格式有更高要求,YAML绝对是值得投入的选择。
上一篇:xml创建节点(根节点、子节点)
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8