XML和YAML的使用方法

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

(0)

相关推荐

  • js跨浏览器实现将字符串转化为xml对象的方法

    注意该死的ie多版本的问题 复制代码 代码如下: function loadXML(xmlString) { var xmlDoc = null; if (!window.DOMParser && window.ActiveXObject) { var xmlDomVersions = ['MSXML.2.DOMDocument.6.0', 'MSXML.2.DOMDocument.3.0', 'Microsoft.XMLDOM']; for (var i = 0; i < xmlD

  • php 修改、增加xml结点属性的实现代码

    php 修改 增加xml结点属性的代码,供大家学习参考.php修改xml结点属性,增加xml结点属性的代码,有需要的朋友,参考下. 1.xml文件 复制代码 代码如下: <?xml version="1.0" encoding="UTF-8" ?><clientSet><server url="192.168.0.180" port="1935" /><rootPath value=&

  • php操作xml

    要操作的数据 复制代码 代码如下: <?xml version="1.0"?><books>    <book name="JavaScript: The Defiitive Guide" publisher="O'Reilly Media, Inc.">        <author>David Flanagan</author>    </book>    <boo

  • 在java中使用dom4j解析xml(示例代码)

    虽然Java中已经有了Dom和Sax这两种标准解析方式 但其操作起来并不轻松,对于我这么一个初学者来说,其中部分代码是活生生的恶心 为此,伟大的第三方开发组开发出了Jdom和Dom4j等工具 鉴于目前的趋势,我们这里来讲讲Dom4j的基本用法,不涉及递归等复杂操作 Dom4j的用法很多,官网上的示例有那么点儿晦涩,这里就不写了 首先我们需要出创建一个xml文档,然后才能对其解析 xml文档: 复制代码 代码如下: <?xml version="1.0" encoding=&quo

  • C++ OpenCV读写XML或YAML文件的方法详解

    目录 前言 1.如何使用 1.1第一步:XML.YAML文件的打开 1.2 第二步:进行文件读写操作 1.3 第三步:vector(array)和map的输入和输出 1.4 第四步:文件关闭 2.代码展示 2.1 写文件 2.2 读文件 2.3 完整的示例代码 前言 本节我们将认识XML和YAML这两种文件类型. 所谓XML,即eXtensible Markup Language,翻译成中文为“可扩展标识语言”.首先,XML是一种元标记语言.所谓元标记,就是开发者可以根据自身需要定义自己的标记,

  • XML和YAML的使用方法

    最近处理一些配置文件,碰到了YAML格式的文件,因为之前没接触过此格式的文件,对于XML还比较熟悉一些.那么什么是YAML呢?它相比XML又有哪些优缺点呢?什么情况下用YAML呢?YAML怎么使用呢?在此做一个简单的总结吧.咱们就先从XML来说吧.相信XML大家都比较熟知吧.下面是我从网络上摘取的概念性的东西,大家可以看一下.在此就不多说了.更多的说一些基本用法.XML概述:可扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记

  • JavaScript将XML转成JSON的方法

    本文实例讲述了JavaScript将XML转成JSON的方法.分享给大家供大家参考.具体方法如下: 1. JavaScript代码如下: 复制代码 代码如下: // Changes XML to JSON function xmlToJson(xml) {     // Create the return object     var obj = {};     if (xml.nodeType == 1) { // element         // do attributes       

  • dom4j创建和解析xml文档的实现方法

    DOM4J解析 特征: 1.JDOM的一种智能分支,它合并了许多超出基本XML文档表示的功能. 2.它使用接口和抽象基本类方法. 3.具有性能优异.灵活性好.功能强大和极端易用的特点. 4.是一个开放源码的文件 jar包:dom4j-1.6.1.jar 创建 book.xml: package com.example.xml.dom4j; import java.io.FileWriter; import org.dom4j.Document; import org.dom4j.Document

  • Java获取XML节点总结之读取XML文档节点的方法

    dom4j是Java的XML API,用来读写XML文件的.目前有很多场景中使用dom4j来读写xml的. 要使用dom4j开发,需要下载导入dom4j相应的jar文件. 官网下载:http://www.dom4j.org/dom4j-1.6.1/ github下载:http://dom4j.github.io/ 下载解压之后如图所示: 我们只需要把dom4j-1.6.1.jar文件构建到我们开发项目中就可以了. 下面就以Eclipse创建java项目的构建方法为例说明: 声明:本Java项目的

  • C#针对xml文件转化Dictionary的方法

    本文实例讲述了C#针对xml文件转化Dictionary的方法.分享给大家供大家参考.具体实现方法如下: 下面是xml文件: 复制代码 代码如下: <?xml version="1.0" encoding="utf-8" ?> <nodes> <国土局> <name>市局国土资源局</name> <code>330</code> <受理 telephone="8820

  • PHP实现使用DOM将XML数据存入数组的方法示例

    本文实例讲述了PHP实现使用DOM将XML数据存入数组的方法.分享给大家供大家参考,具体如下: <?php $doc = new DOMDocument('1.0','utf-8'); $doc->load("config.xml"); $roots=$doc->documentElement;//获取根节点也就是config(仅有一个) $childs=$roots->childNodes;//获取根节点下所有子节点也就是 db smarty for($i=0

  • 通过php删除xml文档内容的方法

    本文实例讲述了通过php删除xml文档内容的方法.分享给大家供大家参考.具体实现方法如下: 第一种情况:删除一个student节点 复制代码 代码如下: <?php //1.创建一个DOMDocument对象.该对象就表示 xml文件 $xmldoc = new DOMDocument(); //2.加载xml文件(指定要解析哪个xml文件,此时dom树节点就会加载到内存中) $xmldoc->load("class.xml"); //3.删除一条学生student信息记录

  • 通过php添加xml文档内容的方法

    本文实例讲述了通过php添加xml文档内容的方法.分享给大家供大家参考.具体分析如下: 这里讲述的添加xml文档内容,从上一篇<DOM基础及php读取xml内容操作的方法>继续,代码如下: 复制代码 代码如下: <?php //1.创建一个DOMDocument对象.该对象就表示 xml文件 $xmldoc = new DOMDocument(); //2.加载xml文件(指定要解析哪个xml文件,此时dom树节点就会加载到内存中) $xmldoc->load("clas

  • php解析xml 的四种简单方法(附实例)

    XML处理是开发过程中经常遇到的,PHP对其也有很丰富的支持,本文只是对其中某几种解析技术做简要说明,包括:Xml parser, SimpleXML, XMLReader, DOMDocument. 1. XML Expat Parser: XML Parser使用Expat XML解析器.Expat是一种基于事件的解析器,它把XML文档视为一系列事件.当某个事件发生时,它调用一个指定的函数处理它.Expat是无验证的解析器,忽略任何链接到文档的DTD.但是,如果文档的形式不好,则会以一个错误

随机推荐