<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Computer, Electron and Technology &#187; 扩展</title>
	<atom:link href="http://www.donevii.com/post/tag/%e6%89%a9%e5%b1%95/feed" rel="self" type="application/rss+xml" />
	<link>http://www.donevii.com</link>
	<description>DoneVII CET &#38; CPPLITE</description>
	<lastBuildDate>Wed, 02 Jun 2010 10:45:52 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>XML 生成类</title>
		<link>http://www.donevii.com/post/14.html</link>
		<comments>http://www.donevii.com/post/14.html#comments</comments>
		<pubDate>Thu, 17 Aug 2006 07:18:52 +0000</pubDate>
		<dc:creator>dengwei</dc:creator>
				<category><![CDATA[web]]></category>
		<category><![CDATA[class]]></category>
		<category><![CDATA[debug]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[ror]]></category>
		<category><![CDATA[xml]]></category>
		<category><![CDATA[扩展]]></category>
		<category><![CDATA[类]]></category>
		<category><![CDATA[需求]]></category>

		<guid isPermaLink="false">http://www.donevii.com/?p=14</guid>
		<description><![CDATA[因为时常用到 XML ，但是有时是在 PHP4 环境、有时是在 PHP5 环境，并且有的环境中并没有编译 XML 的扩展，所以没办法，为了让代码可以在任意环境运行，只好自己写了生成 XML 的类，现在的功... ]]></description>
			<content:encoded><![CDATA[<p>因为时常用到 <a href="http://www.donevii.com/post/tag/xml" class="st_tag internal_tag" rel="tag" title="Posts tagged with xml">XML</a> ，但是有时是在 PHP4 环境、有时是在 PHP5 环境，并且有的环境中并没有编译 <a href="http://www.donevii.com/post/tag/xml" class="st_tag internal_tag" rel="tag" title="Posts tagged with xml">XML</a> 的扩展，所以没办法，为了让代码可以在任意环境运行，只好自己写了生成 <a href="http://www.donevii.com/post/tag/xml" class="st_tag internal_tag" rel="tag" title="Posts tagged with xml">XML</a> 的类，现在的功能仅支持生成 <a href="http://www.donevii.com/post/tag/xml" class="st_tag internal_tag" rel="tag" title="Posts tagged with xml">XML</a> 没有读取，暂时已经能较好的完成我的需求了，过段时间考虑重写一下，现在的代码 looks like too bad.</p>
<p>:)</p>
<p>使用时请把 <a href="http://www.donevii.com/post/tag/debug" class="st_tag internal_tag" rel="tag" title="Posts tagged with debug">DEBUG</a> 部分代码给注释掉。</p>
<p style="border: 1px solid #333333; padding: 1em; background-color: #eeeeee; font-size: 12px">&lt;?<a href="http://www.donevii.com/post/tag/php" class="st_tag internal_tag" rel="tag" title="Posts tagged with php">php</a><br />
/*<br />
* $Id$<br />
*/</p>
<p>// 程序名：<a href="http://www.donevii.com/post/tag/xml" class="st_tag internal_tag" rel="tag" title="Posts tagged with xml">xml</a>.<a href="http://www.donevii.com/post/tag/php" class="st_tag internal_tag" rel="tag" title="Posts tagged with php">php</a><br />
// 用  途：根据传入内容生成 <a href="http://www.donevii.com/post/tag/xml" class="st_tag internal_tag" rel="tag" title="Posts tagged with xml">XML</a> 文件<br />
// 作  者：邓威<br />
// 日  期：2006-03-04<br />
// 修　改：2006-03-13 邓威，错误修正<br />
// 修　改：2006-07-07 邓威，重写代码，把原先的三个 <a href="http://www.donevii.com/post/tag/class" class="st_tag internal_tag" rel="tag" title="Posts tagged with class">class</a> 改写成一个<br />
error_reporting(E_ALL);</p>
<p>/* 例子一 */<br />
$tree = new <a href="http://www.donevii.com/post/tag/xml" class="st_tag internal_tag" rel="tag" title="Posts tagged with xml">xml</a>(&#8220;tree&#8221;);<br />
$tree-&gt;type(&#8220;<a href="http://www.donevii.com/post/tag/xml" class="st_tag internal_tag" rel="tag" title="Posts tagged with xml">xml</a>&#8221;);<br />
$tree-&gt;encoding(&#8216;GB2312&#8242;);<br />
$tree-&gt;attributes( Array(&#8216;aaa&#8217; =&gt; 111, &#8216;bbb&#8217; =&gt; 222 ) );</p>
<p>$tree1 = new <a href="http://www.donevii.com/post/tag/xml" class="st_tag internal_tag" rel="tag" title="Posts tagged with xml">xml</a>(&#8220;tree1&#8243;);<br />
$tree1-&gt;tag(&#8220;tree1&#8243;);<br />
$tree1-&gt;value(&#8216;aaaa&#8217;,true);</p>
<p>$tree2 = new <a href="http://www.donevii.com/post/tag/xml" class="st_tag internal_tag" rel="tag" title="Posts tagged with xml">xml</a>(&#8220;tree2&#8243;,&#8221;123&#8243;);<br />
$tree2-&gt;attribute(&#8216;abc&#8217;,'cba&#8217;);</p>
<p>$tree-&gt;addNode($tree1);<br />
$tree-&gt;addNode($tree2);</p>
<p>header(&#8216;Content-Type: text/<a href="http://www.donevii.com/post/tag/xml" class="st_tag internal_tag" rel="tag" title="Posts tagged with xml">xml</a>&#8217;);<br />
echo $tree-&gt;display();</p>
<p>/* 例子二<br />
$tree11 = new <a href="http://www.donevii.com/post/tag/xml" class="st_tag internal_tag" rel="tag" title="Posts tagged with xml">xml</a>(&#8220;tagname&#8221;, &#8216;asdfasdf&#8217;);<br />
echo $tree11-&gt;display();</p>
<p>$tree22 = new <a href="http://www.donevii.com/post/tag/xml" class="st_tag internal_tag" rel="tag" title="Posts tagged with xml">xml</a>(&#8216;tagname1&#8242;,123123, array( &#8216;bb&#8217; =&gt; 11 ));<br />
echo $tree22-&gt;display();</p>
<p>$tree33 = new <a href="http://www.donevii.com/post/tag/xml" class="st_tag internal_tag" rel="tag" title="Posts tagged with xml">xml</a>(&#8216;tagname3&#8242;);<br />
echo $tree33-&gt;display();<br />
*/</p>
<p><a href="http://www.donevii.com/post/tag/class" class="st_tag internal_tag" rel="tag" title="Posts tagged with class">class</a> <a href="http://www.donevii.com/post/tag/xml" class="st_tag internal_tag" rel="tag" title="Posts tagged with xml">xml</a><br />
{<br />
var $NodeTag  = &#8220;&#8221;;  // 当前对象的标签名<br />
var $NodeType  = &#8220;node&#8221;; // 共有四种类型：element, node, <a href="http://www.donevii.com/post/tag/xml" class="st_tag internal_tag" rel="tag" title="Posts tagged with xml">xml</a><br />
var $NodeNodes  = array(); // 子结点集合<br />
var $NodeEncoding = &#8220;utf-8&#8243;; // 编码方式<br />
var $NodeAttributes = array(); // 属性集合<br />
var $NodeVersion = &#8220;1.0&#8243;; // 版本号<br />
var $cdata  = false; // 是否使用 cdata 分隔符<br />
var $NodeValue  = &#8220;&#8221;;  // 结点值</p>
<p>/*<br />
* 构造函数<br />
*/</p>
<p>function <a href="http://www.donevii.com/post/tag/xml" class="st_tag internal_tag" rel="tag" title="Posts tagged with xml">xml</a>($strTag = NULL,$mixValue = NULL, $arrAttributes = NULL, $cdata = false)<br />
{<br />
if( !$strTag ) return false;<br />
$this-&gt;tag($strTag);<br />
if( is_array( $arrAttributes ) ) $this-&gt;attributes($arrAttributes);<br />
if( method_exists($mixValue, &#8220;type&#8221;) &amp;&amp; ( $mixValue-&gt;type() == &#8220;node&#8221; || $mixValue-&gt;type() == &#8220;element&#8221; ))<br />
{<br />
$this-&gt;addNode($mixValue);<br />
}<br />
else<br />
{<br />
if( is_string($mixValue) ) $this-&gt;cdata = true;<br />
$this-&gt;value($mixValue, $cdata);<br />
}<br />
return $this;<br />
}</p>
<p>/*<br />
* 返回子节点数量<br />
*/</p>
<p>function NodeCount()<br />
{<br />
return count($this-&gt;NodeNodes);<br />
}</p>
<p>/*<br />
* <a href="http://www.donevii.com/post/tag/xml" class="st_tag internal_tag" rel="tag" title="Posts tagged with xml">XML</a> 文件版本号<br />
* 现行的 <a href="http://www.donevii.com/post/tag/xml" class="st_tag internal_tag" rel="tag" title="Posts tagged with xml">XML</a> 文件中只有 1.0 版本<br />
*/</p>
<p>function version($strVersion = NULL)<br />
{<br />
if( !$strVersion ) return $this-&gt;NodeVersion;<br />
$this-&gt;NodeVersion = $strVersion;<br />
return true;<br />
}</p>
<p>/*<br />
* <a href="http://www.donevii.com/post/tag/xml" class="st_tag internal_tag" rel="tag" title="Posts tagged with xml">XML</a> 文件编码<br />
*/</p>
<p>function encoding($strEncoding = NULL)<br />
{<br />
if( !$strEncoding ) return $this-&gt;NodeEncoding;<br />
$this-&gt;NodeEncoding = $strEncoding;<br />
return true;<br />
}</p>
<p>/*<br />
* 节点标签名<br />
*/</p>
<p>function tag($strTag = NULL)<br />
{<br />
if( !$strTag ) return $this-&gt;NodeTag;<br />
$this-&gt;NodeTag = $strTag;<br />
return true;<br />
}</p>
<p>/*<br />
* 设置节点属性<br />
*/</p>
<p>function attribute($strAttributeName = NULL, $mixAttributeValue = NULL)<br />
{<br />
if( !$strAttributeName ) return false;<br />
// 设置属性<br />
if( $mixAttributeValue )<br />
{<br />
$this-&gt;NodeAttributes[$strAttributeName] = $mixAttributeValue;<br />
}<br />
else // 删除属性<br />
{<br />
unset( $this-&gt;NodeAttributes[$strAttributeName] );<br />
}<br />
return true;<br />
}</p>
<p>/*<br />
* 设置节点属性集<br />
*/</p>
<p>function attributes($arrAttributes = NULL)<br />
{<br />
if( !$arrAttributes ) return false;<br />
if( !is_array($arrAttributes) ) return false;<br />
$this-&gt;NodeAttributes = $arrAttributes;<br />
return true;<br />
}</p>
<p>/*<br />
* 子节点集合<br />
*/<br />
function nodes($arrNodes = NULL)<br />
{<br />
if( !$arrNodes ) return $this-&gt;NodeNodes;<br />
if( !is_array($arrNodes) ) return false;<br />
$this-&gt;NodeNodes = $arrNodes;<br />
return true;<br />
}</p>
<p>/*<br />
* 节点类型<br />
*/</p>
<p>function type($strType = NULL)<br />
{<br />
if( !$strType ) return $this-&gt;NodeType;<br />
if( $strType != &#8220;<a href="http://www.donevii.com/post/tag/xml" class="st_tag internal_tag" rel="tag" title="Posts tagged with xml">xml</a>&#8221; &amp;&amp; $strType != &#8220;node&#8221; &amp;&amp; $strType != &#8220;element&#8221; ) return false;<br />
$this-&gt;NodeType = $strType;<br />
return true;<br />
}</p>
<p>/*<br />
* 加入新的节点对象<br />
*/</p>
<p>function addNode($objNode = NULL)<br />
{<br />
if( !$objNode ) return false;<br />
// lcl 是 local 的缩写，lcl_type 即是 local_type 局部变量的缩写<br />
$lcl_type = $objNode-&gt;type();<br />
if( $lcl_type != &#8220;element&#8221; &amp;&amp; $lcl_type != &#8220;node&#8221; &amp;&amp; $lcl_type != &#8220;<a href="http://www.donevii.com/post/tag/xml" class="st_tag internal_tag" rel="tag" title="Posts tagged with xml">xml</a>&#8221; ) return false;<br />
if( $lcl_type == &#8220;<a href="http://www.donevii.com/post/tag/xml" class="st_tag internal_tag" rel="tag" title="Posts tagged with xml">xml</a>&#8221; ) $objNode-&gt;type(&#8220;node&#8221;);<br />
// 加入新的节点对象<br />
$this-&gt;NodeNodes[count($this-&gt;NodeNodes)] = $objNode;<br />
return true;<br />
}</p>
<p>/*<br />
* 删除指定的节点<br />
*/</p>
<p>function removeNodeByIndex($intIndex = 0)<br />
{<br />
return array_splice($this-&gt;NodeNodes, $intIndex-1, 1);<br />
}</p>
<p>/*<br />
* 删除指定的属性<br />
*/</p>
<p>function removeAttributeByIndex($intIndex = 0)<br />
{<br />
return array_splice($this-&gt;NodeAttributes, $intIndex-1, 1);<br />
}</p>
<p>/*<br />
* 节点值<br />
*/</p>
<p>function value($mixValue = &#8221; , $cdata = false)<br />
{<br />
if( !$mixValue ) return $this-&gt;NodeValue;<br />
if( $cdata ) $this-&gt;cdata = true;<br />
$this-&gt;NodeValue = $mixValue;<br />
return true;<br />
}</p>
<p>/*<br />
* 得到显示字符串<br />
*/</p>
<p>function display($src_encoding = NULL, $intDepth = 0)<br />
{<br />
$strDisplay = &#8220;&#8221;;<br />
$strAttribute = &#8220;&#8221;;</p>
<p>if( !$intDepth ) $intDepth = 0;</p>
<p>// 根节点<br />
if( $this-&gt;type() == &#8220;<a href="http://www.donevii.com/post/tag/xml" class="st_tag internal_tag" rel="tag" title="Posts tagged with xml">xml</a>&#8221; )<br />
{<br />
$strDisplay .= &#8220;&lt;?<a href="http://www.donevii.com/post/tag/xml" class="st_tag internal_tag" rel="tag" title="Posts tagged with xml">xml</a> version=\&#8221;" . $this-&gt;version() . &#8220;\&#8221; encoding=\&#8221;" . $this-&gt;encoding() . &#8220;\&#8221; ?&gt;\n&#8221;;<br />
}</p>
<p>// 缩近修正<br />
$TAB_FIX = str_repeat( &#8220;\t&#8221; , $intDepth);</p>
<p>// 属性<br />
if( ($lcl_count = count( $this-&gt;attributes() ) ) &gt; 0 )<br />
{<br />
// 有属性<br />
foreach( $this-&gt;NodeAttributes as $SingleAttribute =&gt; $SingleValue )<br />
{<br />
$strAttribute .= &#8216; &#8216; . $SingleAttribute . &#8216;=&#8221;&#8216; . $SingleValue . &#8216;&#8221;&#8216;;<br />
}<br />
}</p>
<p>// 生成标签头<br />
$strDisplay .= $TAB_FIX . &#8220;&lt;&#8221; . $this-&gt;NodeTag . $strAttribute;</p>
<p>// 节点<br />
if( ($lcl_counts = $this-&gt;NodeCount()) &gt; 0 )<br />
{<br />
// 关闭标签头<br />
$strDisplay .= &#8220;&gt;\n&#8221;;<br />
// 如果有子节点集<br />
foreach( $this-&gt;NodeNodes as $SingleNode )<br />
{<br />
$strDisplay .= $SingleNode-&gt;display($src_encoding, $intDepth+1);<br />
}<br />
$strDisplay .= &#8220;&lt;/&#8221; . $this-&gt;NodeTag . &#8220;&gt;\n&#8221;;<br />
}<br />
else<br />
{<br />
// 没有子节点<br />
if( !$this-&gt;NodeValue )<br />
{<br />
// 节点没有值<br />
// 关闭标签头<br />
$strDisplay .= &#8221; /&gt;&#8221;;<br />
}<br />
else<br />
{<br />
// 节点有值<br />
$strDisplay .= &#8220;&gt;\n&#8221;;<br />
$strDisplay .= $TAB_FIX;</p>
<p>if( $this-&gt;cdata )<br />
{<br />
$strDisplay .= $TAB_FIX . &#8220;&lt;![CDATA[" . ($src_encoding?iconv($src_encoding, $this-&gt;encoding() , $this-&gt;NodeValue):$this-&gt;NodeValue) . "]]&gt;\n&#8221;;<br />
}<br />
else<br />
{<br />
$strDisplay .= $TAB_FIX . ($src_encoding?iconv($src_encoding, $this-&gt;encoding() , $this-&gt;NodeValue):$this-&gt;NodeValue) . &#8220;\n&#8221;;<br />
}</p>
<p>$strDisplay .= $TAB_FIX . &#8220;&lt;/&#8221; . $this-&gt;NodeTag . &#8220;&gt;\n&#8221;;<br />
}</p>
<p>}<br />
return $strDisplay;<br />
}<br />
}</p>
<p>?&gt;</p>

	<h4>相关文章</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.donevii.com/post/283.html" title="免费软件套装 (2007-01-08)">免费软件套装</a> (0)</li>
	<li><a href="http://www.donevii.com/post/203.html" title="使用memcached进行内存缓存 (2006-11-15)">使用memcached进行内存缓存</a> (0)</li>
	<li><a href="http://www.donevii.com/post/24.html" title="使用Boost.Python构建混合系统 (2006-08-20)">使用Boost.Python构建混合系统</a> (0)</li>
	<li><a href="http://www.donevii.com/post/330.html" title="[超长篇] Inject Your Code to a Portable Executable File (2007-05-24)">[超长篇] Inject Your Code to a Portable Executable File</a> (0)</li>
	<li><a href="http://www.donevii.com/post/314.html" title="Shell编程 &#8211; 傻瓜教程1 (2007-03-24)">Shell编程 &#8211; 傻瓜教程1</a> (0)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.donevii.com/post/14.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
