Zend_Config_Xml.xml 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  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');
  49. echo $config->database->params->host; // 输出 "dev.example.com"
  50. echo $config->database->params->dbname; // 输出 "dbname"
  51. ]]>
  52. </programlisting>
  53. </example>
  54. <example id="zend.config.adapters.xml.example.attributes">
  55. <title> 在 Zend_Config_Xml 使用标签(tag)属性 </title>
  56. <para>
  57. Zend_Config_Xml 也支持另外两种方法在配置文件里定义节点。它们都利用属性。
  58. 因为 <code>extends</code> 和 <code>value</code> 属性是保留关键字(后者是第二种使用属性的方法),它们可能不被使用。
  59. 第一种方法使用属性是把属性添加到父节点,它本身就变成了子节点:
  60. </para>
  61. <programlisting role="xml"><![CDATA[
  62. <?xml version="1.0"?>
  63. <configdata>
  64. <production webhost="www.example.com">
  65. <database adapter="pdo_mysql">
  66. <params host="db.example.com" username="dbuser" password="secret" dbname="dbname"/>
  67. </database>
  68. </production>
  69. <staging extends="production">
  70. <database>
  71. <params host="dev.example.com" username="devuser" password="devsecret"/>
  72. </database>
  73. </staging>
  74. </configdata>
  75. ]]>
  76. </programlisting>
  77. <para>
  78. 另一种方法也不会使配置文件变小,但使维护变得容易,是因为你需要要写标签名两次。你可以创建一个空标签,它在 <code>value</code> 属性里包含它的值:
  79. </para>
  80. <programlisting role="xml"><![CDATA[
  81. <?xml version="1.0"?>
  82. <configdata>
  83. <production>
  84. <webhost>www.example.com</webhost>
  85. <database>
  86. <adapter value="pdo_mysql"/>
  87. <params>
  88. <host value="db.example.com"/>
  89. <username value="dbuser"/>
  90. <password value="secret"/>
  91. <dbname value="dbname"/>
  92. </params>
  93. </database>
  94. </production>
  95. <staging extends="production">
  96. <database>
  97. <params>
  98. <host value="dev.example.com"/>
  99. <username value="devuser"/>
  100. <password value="devsecret"/>
  101. </params>
  102. </database>
  103. </staging>
  104. </configdata>
  105. ]]>
  106. </programlisting>
  107. </example>
  108. </sect1>
  109. <!--
  110. vim:se ts=4 sw=4 et:
  111. -->