XML和YAML的使用方法

转载 2016年06月02日 07:56:26

最近处理一些配置文件,碰到了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]

XML和YAML的使用方法

什么是YAML呢?它相比XML又有哪些优缺点呢?什么情况下用YAML呢?YAML怎么使用呢?在此做一个简单的总结。 最近处理一些配置文件,碰到了YAML格式的文件,因为之前没接触过此格式的文件,...
  • u011714480
  • u011714480
  • 2013年11月04日 14:20
  • 1333

XML/YAML文件的输入输出

本文主要阐述XML/YAML文件在OpenCV3中如何实现输入输出操作。     : XML/YAML文件,顾名思义指的是文件的格式,即以.XML为后缀的文件和以.YAML为后缀的文件。     所...
  • qq_32211827
  • qq_32211827
  • 2016年11月22日 09:58
  • 637

理解PHP依赖注入容器(dependency injection container)系列(五) 使用XML 或 YAML 来描述服务

在上篇文章中,你已学会如何用sfServiceContainerBuilder类来描述服务了。今天在loaders和dumpers两个类的帮助下,我们将学会如何用XML或YAML 来描述服务。 Sy...
  • soonfly
  • soonfly
  • 2016年09月25日 11:04
  • 541

Opencv YAML和XML格式文件操作详解

本文参考Opencv 2.4.11 documentation整理对YAML和XML文件实现I/O操作的方法。
  • YhL_Leo
  • YhL_Leo
  • 2015年08月14日 14:09
  • 7738

OpenCV中XML文件和YAML文件的读写

OpenCV中XML文件和YAML文件的读写 代码如下:#include #include #include using namespace cv; using namespace st...
  • Real_Myth
  • Real_Myth
  • 2016年11月02日 23:17
  • 871

opencv学习笔记(二)-对xml和yaml文件的读写操作

一.xml和yaml的简单介绍        所谓的xml,就是eXtensible Markup Language, 翻译成中文就是“可扩展标识语言“。首先XML是一种元标记语言,所谓“元标记”就...
  • dujian996099665
  • dujian996099665
  • 2013年05月03日 11:43
  • 11297

YAML 技术研究

YAML预研文档 YAML概要 YAML vs XML YAML vs JSON YAML用途 脚本语言 序列化 配置文件 调试 YAML缺陷与不足 YAML语法与范例 YAML的JAVA实现 使用S...
  • conquer0715
  • conquer0715
  • 2016年04月29日 18:32
  • 4334

[Golang] 从零开始写Socket Server(4):将运行参数放入配置文件(XML/YAML)

为了将我们写好的Server发布到服务器上,就要将我们的代码进行build打包,这样如果以后想要修改一些代码的话,需要重新给代码进行编译打包并上传到服务器上。     显然,这么做过于繁琐。。。因此...
  • ahlxt123
  • ahlxt123
  • 2015年08月25日 07:13
  • 3230

SSH之Spring传统方式接入YAML管理各环境配置方式(从Spring Boot移植)

Spring YAML配置管理,Spring Boot配置管理,Spring配置管理
  • littlebrain4solving
  • littlebrain4solving
  • 2016年12月17日 15:36
  • 5314

IOS开发中有用的第三方库

#Objective-C中最受瞩目库 [链接](https://github.com/languages​​/Objective-C/most_watched) * [three20](https...
  • wenzfcsdn
  • wenzfcsdn
  • 2015年03月13日 20:22
  • 2742
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:XML和YAML的使用方法
举报原因:
原因补充:

(最多只允许输入30个字)