[ZF-10089] Zend_Log
[zend.git] / documentation / manual / zh / module_specs / Zend_Config_Xml.xml
blobf5329d2be8380fcdfa787453df09b4b2bc049fcb
1 <sect1 id="zend.config.adapters.xml">
2     <title>Zend_Config_Xml</title>
3     <para>
4         <code>Zend_Config_Xml</code> 让开发者能够存储配置数据到一个简单XML格式并通过嵌入对象属性语法来读取。XML文件的根元素(root element)不相关并可以任意命名。顶级的XML元素和配置数据的节相对应。XML格式通过嵌入XML元素到节一级元素(section-level elements)的下面来支持等级结构组织。叶一级(leaf-level)的XML元素和配置数据的值相对应。节继承通过一个特殊的XML属性名为<code>extends</code>来支持,与之相对应的这个属性的值通过扩展节(extending section)来继承。
5     </para>
6     <note>
7         <title>返回类型</title>
8         <para>
9             读入<code>Zend_Config_Xml</code>中的配置数据总是返回字串。数据从字符串到其它类型的转换留给开发者来适应他们特定的需求。
10         </para>
11     </note>
12     <example id="zend.config.adapters.xml.example.using">
13         <title>使用Zend_Config_Xml</title>
14         <para>
15             这个例子示例了从INI文件加载配置数据的<code>Zend_Config_Xml</code>的基本用法。在这个例子中有生产系统(production system)和开发系统(staging system)的配置数据。因为开发系统配置数据和生产系统的配置数据类似,所以开发系统的节从生产系统的节继承。在这个案例中,结果(decision)是任意的并且它可以反过来做,即生产系统节从开发系统节继承,尽管这不可能用于更复杂的情形。接着,假定下面的配置数据包含在<code>/path/to/config.xml</code>中:
16         </para>
17         <programlisting role="xml"><![CDATA[
18 <?xml version="1.0"?>
19 <configdata>
20     <production>
21         <webhost>www.example.com</webhost>
22         <database>
23             <adapter>pdo_mysql</adapter>
24             <params>
25                 <host>db.example.com</host>
26                 <username>dbuser</username>
27                 <password>secret</password>
28                 <dbname>dbname</dbname>
29             </params>
30         </database>
31     </production>
32     <staging extends="production">
33         <database>
34             <params>
35                 <host>dev.example.com</host>
36                 <username>devuser</username>
37                 <password>devsecret</password>
38             </params>
39         </database>
40     </staging>
41 </configdata>
42 ]]>
43 </programlisting>
44         <para>
45             接着,假定开发者需要从XML文件取开发配置数据。这非常简单,只要指定XML文件和开发系统节就可以加载这些数据了:
46         </para>
47         <programlisting role="php"><![CDATA[
48 $config = new Zend_Config_Xml('/path/to/config.xml', 'staging');
50 echo $config->database->params->host;   // 输出 "dev.example.com"
51 echo $config->database->params->dbname; // 输出 "dbname"
52 ]]>
53         </programlisting>
54     </example>
55     <example id="zend.config.adapters.xml.example.attributes">
56         <title> 在 Zend_Config_Xml 使用标签(tag)属性 </title>
57         <para>
58             Zend_Config_Xml 也支持另外两种方法在配置文件里定义节点。它们都利用属性。
59             因为 <code>extends</code> 和 <code>value</code> 属性是保留关键字(后者是第二种使用属性的方法),它们可能不被使用。
60             第一种方法使用属性是把属性添加到父节点,它本身就变成了子节点:
61         </para>
62         <programlisting role="xml"><![CDATA[
63 <?xml version="1.0"?>
64 <configdata>
65     <production webhost="www.example.com">
66         <database adapter="pdo_mysql">
67             <params host="db.example.com" username="dbuser" password="secret" dbname="dbname"/>
68         </database>
69     </production>
70     <staging extends="production">
71         <database>
72             <params host="dev.example.com" username="devuser" password="devsecret"/>
73         </database>
74     </staging>
75 </configdata>
76 ]]>
77 </programlisting>
78         <para>
79             另一种方法也不会使配置文件变小,但使维护变得容易,是因为你需要要写标签名两次。你可以创建一个空标签,它在 <code>value</code>  属性里包含它的值:
80         </para>
81         <programlisting role="xml"><![CDATA[
82 <?xml version="1.0"?>
83 <configdata>
84     <production>
85         <webhost>www.example.com</webhost>
86         <database>
87             <adapter value="pdo_mysql"/>
88             <params>
89                 <host value="db.example.com"/>
90                 <username value="dbuser"/>
91                 <password value="secret"/>
92                 <dbname value="dbname"/>
93             </params>
94         </database>
95     </production>
96     <staging extends="production">
97         <database>
98             <params>
99                 <host value="dev.example.com"/>
100                 <username value="devuser"/>
101                 <password value="devsecret"/>
102             </params>
103         </database>
104     </staging>
105 </configdata>
107 </programlisting>
108     </example>
109 </sect1>
110 <!--
111 vim:se ts=4 sw=4 et: