﻿<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
  <channel>
    <title><![CDATA[项目文档 - 艺风在线 - Power By CSZI.com]]></title>
    <link>http://max.cszi.com</link>
    <description><![CDATA[CSBlog官方网站，CSBlog是巧思工作室使用Asp.Net2.0(C#)开发的一套免费的Blog系统，采用原始数据的Xml+Xslt模板输出标准的Xhtml页面，原创的经典架构、合理的设计、轻巧方便的更改主题，是同类产品中的佼佼者。希望我们辛苦的努力可以为您的生活和工作带来很多方便。]]></description>
    <language>zh-cn</language>
    <copyright><![CDATA[Copyright 2003-2008 ChaosStudio[巧思]]]></copyright>
    <webMaster>zhouyu@69sea.com(一线风)
        </webMaster>
    <generator>CSBlog v2.0.1</generator>
    <image>
      <title><![CDATA[项目文档 - 艺风在线 - Power By ]]></title>
      <url>/App_Themes/Love/Images/</url>
      <link>http://max.cszi.com</link>
      <description><![CDATA[CSBlog官方网站，CSBlog是巧思工作室使用Asp.Net2.0(C#)开发的一套免费的Blog系统，采用原始数据的Xml+Xslt模板输出标准的Xhtml页面，原创的经典架构、合理的设计、轻巧方便的更改主题，是同类产品中的佼佼者。希望我们辛苦的努力可以为您的生活和工作带来很多方便。]]></description>
    </image>
    <item>
      <link>http://max.cszi.com/Blog/Blog.aspx?Id=564</link>
      <title><![CDATA[CSBlogV2.11问题收集与信息反馈专用-提供09年贺岁版下载地址]]></title>
      <author>一线风</author>
      <category>项目文档</category>
      <pubDate>2008-12-31 9:38:44</pubDate>
      <guid>http://max.cszi.com/Blog/Blog.aspx?Id=564</guid>
      <comments>
              /Blog/Blog.aspx?Id=564#commentbox
            </comments>
      <description><![CDATA[<p><strong><font color="#3366ff">您在使用CSBlogV2.11的过程中有什么问题请发表与此的评论中，我们会尽快的给予解决。</font></strong></p>
<p>&nbsp;<a href="http://max.cszi.com/Blog/565-1.aspx"><strong><font color="#ff0000">CSBlogV2.11的更新历史记录：http://max.cszi.com/Blog/565-1.aspx</font></strong></a></p>
<p>1. 如果出现要求写权限的错误，请打开Everyone的读写权限。并且数据库的只读属性要去掉。</p>
<p>&nbsp;</p>
<p><font face="Verdana" color="#ff0000" size="3"><strong>2009新年贺岁版－ 牛气冲天下载：<br />
<br />
1. </strong></font><a href="http://down.chinaz.com/soft/24379.htm"><font face="Verdana" color="#ff0000" size="3"><strong>http://down.chinaz.com/soft/24379.htm</strong></font></a></p>
<p><strong><font face="Verdana" color="#ff0000" size="3">2. </font></strong><a href="http://files.cnblogs.com/atwind/CSBlogV211-Preview1.rar"><strong><font face="Verdana" color="#ff0000" size="3">http://files.cnblogs.com/atwind/CSBlogV211-Preview1.rar</font></strong></a><br />
<br />
<br />
<br />
Q: 为什么新发表的Blog会出现重写错误?<br />
A: 原因是读取不到评论的集合及分页信息,解决办法一是让所有角色都可以读取评论,二是在Blog.xslt(这个对应你的主题的Blog目录下)修改136行附近的原内容为:</p>
<p>&nbsp;&nbsp;&lt;xsl:if test=&quot;$Collection&quot;&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;div&nbsp; class=&quot;comment-page&quot;&nbsp; xml:space=&quot;preserve&quot;&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;xsl:call-template name=&quot;UI.RePaging&quot;&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;xsl:with-param name=&quot;Paging&quot; select=&quot;$Paging&quot; /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;xsl:with-param name=&quot;BaseUrl&quot; select=&quot;cs:makePage('/Blog/Blog.aspx','BlogDetail',$Paging,$Blog/@Id)&quot; /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/xsl:call-template&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/div&gt;<br />
&nbsp;&nbsp;&lt;/xsl:if&gt;</p>
<p>第二种办法是解决的根本.</p><p>----------------------------------------------------------<br />
热心网友建议及回复:</p>
<p>1.大图片应该能自适应最大页面框架，超出某个比例时，将显示最大宽幅的自适应显示器和浏览器的页面（有滚动条也行），不过这一点不太重要。<br />
<font color="#339966">A: 这个可以在后面设定一个比较小的缩略图,而不是直接设为最大的.(因为大图对客户端的下载也是个问题.) 还有个办法就是CSS来控制,溢出时自动隐藏(Baidu 是这样的)</font><br />
<br />
2.图片（附件）上传后，在编辑状态中后或者重新上传，对于指定的上传文件夹中无效的旧图片和附件，系统均应自动给与删除。<br />
<font color="#99cc00">A: 这个将在下一版本上实现.</font><br />
<br />
3.后台可以查看图片附件以及手动清理非有效链接附件（图片）。<br />
<font color="#99cc00">A: 这个将在下一版本上实现.</font><br />
<br />
4.标签总管理，应该可以删除或者修改。<br />
<font color="#33cccc">A: 这个暂时记下</font><br />
<br />
5.系统自动识别图片后，在相册中集中显示；或者单独开设相册（画册）栏目，以列表幻灯等多种模式显示。<br />
<font color="#99cc00">A: 这个将在下一版本上实现.</font><br />
<br />
6.图片上传有时有故障，上传不能成功，需要查找原因修正。<br />
<font color="#ff0000">A: 下一版本改进</font><br />
<br />
7.留言板不可用,不过我考虑外挂一个，因为也有很不错的小型留言板。<br />
<font color="#99cc00">A: 下一版本的插件形式发布</font><br />
<br />
8.用户中心不可用，这需要及早修复，因为会影响用户体验。<br />
<font color="#ff0000">A: 因为现在基本上是本人,所以大多是直接在后台更改,下一版本中改进</font><br />
<br />
9.用户Norton(Symantec）防火墙开启时，诸多功能都出现异常，比如回复，显示为未知错误，但在无验证码情况下，在显示错误的同时，能发布。发文章和图片上传则不行。<br />
<font color="#ff00ff">A:这个没有碰到过,回头我查一下.</font><br />
<br />
10.后台给管理员在后台查看文章标题和所有评论的功能，可以随时总览文章以及评论，方便删除。目前前后台管理分离，分别授权。习惯上后台管理权限应该包括前台管理。但方便起见，增加对文章列表、评论列表、标签列表的管理即可。<br />
<font color="#993366">A: 暂时记下</font><br />
<br />
11.ReWrite重写，可否写成html的后缀？搜索引擎很喜欢。<br />
<font color="#ff0000">A:Html后缀是直接要修改IIS的解析指向的,这个可以在IIS上自已改.已经实现</font><br />
<br />
12.从百度搜索官方站点看，搜索到的内容部分，需要进行改进。目前在meta使用了优秀的调用前部分文章文字功能，但没有发挥作用。<br />
<font color="#00ff00">A:我的SEO确实是凭感觉,回头好好看一下!</font><br />
<br />
13.ACC数据库总保持在出现ldb打开的状态，我不懂，不知道是否是同程序代码有关？<br />
<strong><font style="background-color: #ff0000">A: 一直保持在打开状态是能为了更快速的响应数据读取与更新,可以在后台暂时关闭.</font></strong></p>]]></description>
    </item>
    <item>
      <link>http://max.cszi.com/Blog/Blog.aspx?Id=714</link>
      <title><![CDATA[可伸缩性最佳实践：来自eBay的经验]]></title>
      <author>一线风</author>
      <category>项目文档</category>
      <pubDate>2009-10-23 12:00:07</pubDate>
      <guid>http://max.cszi.com/Blog/Blog.aspx?Id=714</guid>
      <comments>
              /Blog/Blog.aspx?Id=714#commentbox
            </comments>
      <description><![CDATA[<p>转自：<a href="http://www.infoq.com/cn/articles/ebay-scalability-best-practices">http://www.infoq.com/cn/articles/ebay-scalability-best-practices</a></p>
<p>在eBay，可伸缩性是我们每天奋力抵抗的一大架构压力。我们所做的每一项架构及设计决策，身前身后都能看到它的踪影。当我们面对的是全世界数以亿计的用户，每天的页面浏览量超过10亿，系统中的数据量要用皮字节（10<sup>15</sup>或2<sup>50</sup>）来计算&mdash;&mdash;可伸缩性是生死交关的问题。</p>
<div class="vendor-content-box-float">在一个可伸缩的架构中，资源的消耗应该随负载线性（或更佳）上升，负载可由用户流量、数据量等测量。如果说性能衡量的是每一工作单元所需的资源消 耗，可伸缩性则是衡量当工作单元的数量或尺寸增加时，资源消耗的变化情况。换句话说，可伸缩性是整个价格-性能曲线的形状，而不是曲线上某一点的取值。</div>
<p>可伸缩性有很多侧面&mdash;&mdash;事务的方面、运营的方面、还有开发的方面。我们在改善一个Web系统的事务吞吐量的过程中学到了很多经验，本文总结了其中若 干关键的最佳实践。可能很多最佳实践你会觉得似曾相识，也可能有素未谋面的。这些都是开发和运营eBay网站的众人的集体经验结晶。</p><h3>最佳实践 #1：按功能分割</h3>
<p>相关的功能部分应该合在一起，不相关的功能部分应该分割开来&mdash;&mdash;不管你把它叫做SOA、功能分解还是工程秘诀。而且，不相关的功能之间耦合程度越松散，就越能灵活地独立伸缩其中的一部分。</p>
<p>在编码层次，我们无时不刻都在运用这条原则。JAR文件、包、Bundle等等，都是用来隔离和抽象功能的机制。</p>
<p>在应用层次，eBay将不同的功能划分成几个应用程序池。<font color="#ff0000">销售功能由一组应用服务器运行，投标功能由另一组负责，搜索又是另外一组服务器</font>。我们把总 共约16,000台应用服务器分成220个池。这样就可以根据某项功能的资源消耗，单独地伸缩其中一个池。我们也因此得以进一步隔离及合理化资源依赖关系 &mdash;&mdash;比如销售池只需要访问后台资源的一个相对较小的子集。</p>
<p>在数据库层次，我们也采取同样的做法。eBay没有无所不包的单一数据库，相反我们有<font color="#ff0000">一组数据库主机存放用户数据、一组存放商品数据、一组存放购买数据</font>&hellip;&hellip;总共1000个逻辑数据库分布在400台物理主机上。同样，这种做法让我们得以单独为某一类数据伸缩其数据库设施。</p>
<h3>最佳实践 #2：水平切分</h3>
<p>按功能分割对我们的帮助很大，但单凭它还不足以得到完全可伸缩的架构。即使将功能一一解耦，单项功能的资源需求随着时间增长，仍然有可能超出单一系 统的能力。我们常常提醒自己，&ldquo;没有分割就没有伸缩&rdquo;。在单项功能内部，我们需要能把工作负载分解成许多我们有能力驾驭的小单元，让每个单元都能维持良好 的性能价格比。这就是水平分割出场的时候了。</p>
<p>在应用层次，由于eBay将各种交互都设计成无状态的，所以水平分割是轻而易举之事。用标准的负载均衡服务器来路由进入的流量。所有应用服务器都是 均等的，而且任何服务器都不会维持事务性的状态，因此<font color="#ff0000">负载均衡可以任意选择应用服务器</font>。如果需要更多处理能力，只需要简单地增加新的应用服务器。</p>
<p>数据库层次的问题比较有挑战性，原因是数据天生就是有状态的。我们会按照主要的访问路径对数据作水平分割（或称为&ldquo;sharding&rdquo;）。例如用户 数据目前被分割到20台主机上，每台主机存放1/20的用户。随着用户数量的增长，以及每个用户的数据量增长，我们会增加更多的主机，将用户分散到更多的 机器上去。商品数据、购买数据、帐户数据等等也都用同样的方式处理。用例不同，我们分割数据的方案也不同：有些是对<font color="#0000ff">主键简单取模</font>（ID尾数为1的放到第一 台主机，尾数为二的放到下一台，以此类推），有些是按照<font color="#ff0000">ID的区间分割</font>（1-1M、1-2M等等），有些<font color="#ff0000">用一个查找表</font>，还有些是综合以上的策略。不过具体 的分割方案如何，总的思想是支持数据分割及重分割的基础设施在可伸缩性上远比不支持的优越。</p>
<h3>最佳实践 #3：避免分布式事务</h3>
<p>看到这里，你可能在疑惑按功能划分数据和水平划分数据的实践如何满足事务要求。毕竟，几乎任何有意义的操作都要更新一个以上的实体&mdash;&mdash;立即就可以举 出用户和商品的例子。正统的广为人知的答案是：建立跨资源的分布式事务，用两段式提交来保证要么所有资源全都更新，要么全都不更新。很不幸，这种悲观方案 的成本很可观。伸缩、性能和响应延迟都受到协调成本的反面影响，随着依赖的资源数量和客户数量的上升，这些指标都会以几何级数恶化。可用性亦受到限制，因 为所有依赖的资源都必须就位。实用主义的答案是，对于不相关的系统，放宽对它们的跨系统事务的保证。</p>
<p>左右逢源是办不到的。保证跨多个系统或分区之间的即时的一致性，通常既无必要，也不现实。Inktomi的Eric Brewer十年前提出的CAP公理是这样说的：分布式系统的三项重要指标&mdash;&mdash;<strong><font color="#800000">一致性（Consistency）、可用性（Availability）和 分区耐受性（Partition-tolerance）&mdash;&mdash;在任意时刻，只有两项能同时成立</font></strong>。对于高流量的网站来说，我们必须选择分区耐受性，因为它是实 现可伸缩的根本。对于24x7运行的网站，选择可用性也是理所当然的。于是只好放弃即时一致性（immediate consistency）。</p>
<p>在eBay，我们绝对不允许任何形式的客户端或者分布式事务&mdash;&mdash;因此绝不需要两段式提交。在某些经过仔细定义的情形下，我们会将作用于同一个数据库 的若干语句捆绑成单个事务性的操作。而对于绝大部分操作，单条语句是自动提交的。虽然我们故意放宽正统的ACID属性，以致不能在所有地方保证即时一致 性，但现实的结果是大部分系统在绝大部分时间都是可用的。当然我们也<font color="#0000ff">采用了一些技术来帮助系统达到最终的一致性</font>（eventual consistency）：周密调整数据库操作的次序、异步恢复事件，以及数据核对（reconciliation）或者集中决算（settlement batches）。具体选择哪种技术要根据特定用例对一致性的需求来决定。</p>
<p>对于架构师和系统的设计者来说，关键是要明白一致性并非&ldquo;有&rdquo;和&ldquo;没有&rdquo;的单选题。现实中大多数的用例都不要求即时一致性。正如我们经常根据成本和其他压力因素来权衡可用性的高低，一致性也同样可以量体裁衣，根据特定操作的需要而保证适当程度的一致性。&nbsp;</p>
<h3>最佳实践 #4：用异步策略解耦程序</h3>
<p>提高可伸缩性的另一项关键措施是积极地采取异步策略。如果组件A同步调用组件B，那么A和B就是紧密耦合的，而紧耦合的系统其可伸缩性特征是各部分 必须共同进退&mdash;&mdash;要伸缩A必须同时伸缩B。同步调用的组件在可用性方面也面临着同样的问题。我们回到最基本的逻辑：如果A推出B，那么非B推出非A。也就 是说，若B不可用，则A也不可用。如果反过来A和B的联系是异步的，不管是通过队列、多播消息、批处理还是什么其他手段，它们就可以分别地伸缩。而且，此 时A和B的可用性特征是相互独立的&mdash;&mdash;即使B受困或者死掉，A仍然能够继续前进。</p>
<p>整个基础设施从上到下都应该贯彻这项原则。即使在单个组件内部也可通过SEDA（<font color="#0000ff">分阶段的事件驱动架构</font>，Staged Event-Driven Architecture）等技术实现异步性，同时保持一个易于理解的编程模型。组件之间也遵守同样的原则&mdash;&mdash;<font color="#0000ff">尽可能避免同步带来的耦合</font>。在多数情况下， 两个组件在任何事件中都不会有直接的业务联系。<font color="#800000"><strong>在所有的层次，把过程分解为阶段（stages or phases），然后将它们异步地连接起来，这是伸缩的关键。</strong></font></p>
<h3>最佳实践 #5：将过程转变为异步的流</h3>
<p>用异步的原则解耦程序，尽可能将过程变为异步的。对于要求快速响应的系统，这样做可以从根本上减少请求者所经历的响应延迟。对于网站或者交易系统， 牺牲数据或执行的延迟时间（完成全部工作的实践）来换取用户的延迟时间（用户得到响应的时间）是值得的。活动跟踪、单据开付、决算和报表等处理过程显然都 应该属于后台活动。主要用例过程中常常有很多步骤可以进一部分解成异步运行。<font color="#0000ff">任何可以晚点再做的事情都应该晚点再做。</font></p>
<p>还有一个同等重要的方面认识到的人不多：<font color="#3366ff">异步性可以从根本上降低基础设施的成本</font>。同步地执行操作迫使你必须按照负载的峰值来配备基础设施&mdash;&mdash;即使在 任务最重的那一天里任务最重的那一秒，设施也必须有能力立即完成处理。而将昂贵的处理过程转变为异步的流，基础设施就不需要按照峰值来配备，只需要满足平 均负载。而且也不需要立即处理所有的请求，异步队列可以将处理任务分摊到较长的时间里，因而起到削峰的作用。系统的负载变化越大，曲线越多尖峰，就越能从 异步处理中得益。</p>
<h3>最佳实践 #6：虚拟化所有层次</h3>
<p>虚拟化和抽象化无所不在，计算机科学里有一句老话：<font color="#3366ff">所有问题都可以通过增加一个间接层次来解决</font>。操作系统是对硬件的抽象，而许多现代语言所用的虚拟 机又是对操作系统的抽象。对象-关系映射层抽象了数据库。负载均衡器和虚拟IP抽象了网络终端。当我们通过分割数据和程序来提高基础设施的可伸缩性，为各 种分割增加额外的虚拟层次就成为重中之重。</p>
<p>在eBay，我们<font color="#ff0000">虚拟化了数据库</font>。<font color="#ff0000">应用与逻辑数据库交互，逻辑数据库再按照配置映射到某个特定的物理机器和数据库实例</font>。应用也抽象于执行数据分割的 路由逻辑，路由逻辑会把特定的记录（如用户XYZ）分配到指定的分区。这两类抽象都是在我们自己开发的O/R层上实现的。这样虚拟化之后，我们的运营团队 可以按需要在物理主机群上重新分配逻辑主机&mdash;&mdash;分离、合并、移动&mdash;&mdash;而完全不需要接触应用程序代码。</p>
<p>搜索引擎同样是虚拟化的。为了得到搜索结果，<font color="#3366ff">一个聚合器组件会在多个分区上执行并行的查询</font>，但这个高度分割的搜索网格在客户看来只是单一的逻辑索引。</p>
<p>以上种种措施并不只是为了程序员的方便，运营上的灵活性也是一大动机。硬件和软件系统都会故障，请求需要重新路由。组件、机器、分区都会不时增减、 移动。<font color="#3366ff">明智地运用虚拟化，可使高层的设施对以上变化难得糊涂，你也就有了腾挪的余地</font>。虚拟化使基础设施的伸缩成为可能，因为它使伸缩变成可管理的。</p>
<h3>最佳实践 #7：适当地使用缓存</h3>
<p>最后要适当地使用缓存。这里给出的建议不一定普遍适用，因为缓存是否高效极大地依赖于用例的细节。说到底，要在存储约束、对可用性的需求、对陈旧数 据的容忍程度等条件下最大化缓存的命中率，这才是一个高效的缓存系统的最终目标。经验证明，要平衡众多因素是极其困难的，即使暂时达到目标，情况也极可能 随着时间而改变。</p>
<p><font color="#0000ff"><strong>最适合缓存的是很少改变、以读为主的数据&mdash;&mdash;比如元数据、配置信息和静态数据</strong></font>。在eBay，我们积极地缓存这种类型的数据，并且结合使用&ldquo;推&rdquo;和&ldquo; 拉&rdquo;两种方法保持系统在一定程度上的更新同步。减少对相同数据的重复请求能达到非常显著的效果。频繁变更、读写兼有的数据很难有效地缓存。在eBay，我 们大多有意识地回避这样的难题。我们一直不对请求间短暂存在的会话数据作任何缓存。也不在应用层缓存共享的业务对象，比如商品和用户数据。我们有意地牺牲 缓存这些数据的潜在利益，换取可用性和正确性。在此必须指出，其他网站采取了不同的途径，作了不同的取舍，也同样取得了成功。</p>
<p>好东西也会过犹不及。为缓存分配的内存越多，能用来服务单个请求的内存就越少。应用层常常有内存不足的压力，因此这是非常现实的权衡。更重要的一 点，<font color="#0000ff">当你开始依赖于缓存，那么主要系统就只需要满足缓存未命中时的处理要求</font>，自然而然你就会想到可以削减主要系统。但当你这样做之后，系统就完全离不开缓 存了。现在主要系统没办法直接应付全部流量，也就是说网站的可用性取决于缓存能否100%正常运行&mdash;&mdash;潜在的危局。哪怕是例行的操作，比如重新配置缓存资 源、把缓存移动到别的机器、冷启动缓存服务器，都有可能引发严重的问题。</p>
<p>做得好，缓存系统能让可伸缩性的曲线向下弯曲，也就是比线性增长还要好&mdash;&mdash;后续请求从缓存中取数据比从主存储取数据成本低廉。反过来，缓存做得不好 会引入相当多额外的经常耗费，也会妨碍到可用性。我还没见过哪个系统没机会让缓存大展拳脚的，关键是要根据具体情况找到适当缓存策略。</p>
<h3>总结</h3>
<p>可伸缩性有时候被叫做&ldquo;非功能性需求&rdquo;，言下之意是它与功能无关，也就比较不重要。这么说简直错到了极点。我的观点是，可伸缩性是功能的先决条件&mdash;&mdash;优先级为0的需求，比一切需求的优先级都高。</p>
<p>希望以上最佳实践能对你有用，希望能帮助你从新的角度审视你的系统，无论其规模如何。</p>
<h3>参考</h3>
<ul>
    <li><a href="http://www.eos1.dk/qcon/sf2007/slides/public/RandyShoup_eBayArchPrinciples.pdf" target="_blank"><font color="#0b59b2">eBay's Architectural Principles</font></a> (<a href="http://www.infoq.com/presentations/shoup-ebay-architectural-principles" target="_blank"><font color="#0b59b2">video</font></a>)</li>
    <li><a href="http://www.allthingsdistributed.com/2006/03/a_word_on_scalability.html" target="_blank"><font color="#0b59b2">Werner <span class="SpellE">Vogels on scalability</span></font></a></li>
    <li><a href="http://www.addsimplicity.com/downloads/ScalingVectors.pdf" target="_blank"><font color="#0b59b2">Dan Pritchett on You Scaled Your What?</font></a></li>
    <li><a href="http://highscalability.com/unorthodox-approach-database-design-coming-shard" target="_blank"><font color="#0b59b2">The Coming of the Shard</font></a></li>
    <li><a href="http://www.infoq.com/news/2008/03/ebaybase" target="_blank"><font color="#0b59b2">Trading Consistency for Availability in Distributed Architectures</font></a></li>
    <li><a href="http://www.ccs.neu.edu/groups/IEEE/ind-acad/brewer/sld001.htm" target="_blank"><font color="#0b59b2">Eric Brewer on the CAP Theorem</font></a></li>
    <li><a href="http://www.eecs.harvard.edu/%7Emdw/papers/seda-sosp01.pdf" target="_blank"><font color="#0b59b2">SEDA: An Architecture for Well-Conditioned, Scalable Internet Services</font></a></li>
</ul>
<h3>关于作者</h3>
<p>Randy Shoup是eBay的杰出架构师。从2004年起担任eBay搜索基础设施的主要架构师。在加入eBay之前，他是Tumbleweed Communications公司的总架构师，也曾在Oracle和Informatica担任多个软件开发和架构的职位。</p>
<p>他经常在业界的会议上讲授可伸缩性和架构模式。</p>
<p><strong>阅读英文原文：</strong><a href="http://www.infoq.com/articles/ebay-scalability-best-practices" target="_blank"><font color="#0b59b2">Scalability Best Practices: Lessons from eBay</font></a></p>]]></description>
    </item>
    <item>
      <link>http://max.cszi.com/Blog/Blog.aspx?Id=682</link>
      <title><![CDATA[关于枚举类型转换的效率测试]]></title>
      <author>一线风</author>
      <category>项目文档</category>
      <pubDate>2009-6-25 13:54:23</pubDate>
      <guid>http://max.cszi.com/Blog/Blog.aspx?Id=682</guid>
      <comments>
              /Blog/Blog.aspx?Id=682#commentbox
            </comments>
      <description><![CDATA[<p>权限系统里要有一些枚举和Int之间的转换,现测试一下,看看情况.呵~ 情况还是不错的!</p>
<p>1000000次测试结果:<br />
<strong><font color="#0000ff">4</font></strong> &lt;第三代权限判断方法&gt;<br />
255&nbsp;<br />
<strong>4 </strong>&lt;第二代权限判断方法&gt;<br />
<font color="#ff0000"><strong>28</strong></font> &lt;第一代权限判断方法&gt;</p>
<p><br />
看来枚举与int之间的转换消耗可以忽略呀.</p><p>&nbsp;</p>
<div class="codeText">
<div class="codeHead">C#代码</div>
<ol class="dp-c">
    <li class="alt"><span><span class="keyword">void</span><span>&nbsp;T14() &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stopwatch&nbsp;timer&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Stopwatch(); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;timer.Start(); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TT1(); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;timer.Stop(); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Response.Write(timer.ElapsedMilliseconds.ToString()&nbsp;+&nbsp;</span><span class="string">&quot;\n&lt;br&gt;&quot;</span><span>); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stopwatch&nbsp;timer2&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Stopwatch(); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;timer2.Start(); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TT2(); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;timer2.Stop(); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Response.Write(timer2.ElapsedMilliseconds.ToString()&nbsp;+&nbsp;</span><span class="string">&quot;\n&lt;br&gt;&quot;</span><span>); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stopwatch&nbsp;timer3&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Stopwatch(); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;timer3.Start(); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TT3(); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;timer3.Stop(); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Response.Write(timer3.ElapsedMilliseconds.ToString()&nbsp;+&nbsp;</span><span class="string">&quot;\n&lt;br&gt;&quot;</span><span>); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stopwatch&nbsp;timer4&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Stopwatch(); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;timer4.Start(); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TT4(); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;timer4.Stop(); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Response.Write(timer4.ElapsedMilliseconds.ToString()&nbsp;+&nbsp;</span><span class="string">&quot;\n&lt;br&gt;&quot;</span><span>); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">void</span><span>&nbsp;TT1() &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">bool</span><span>&nbsp;t&nbsp;=&nbsp;</span><span class="keyword">false</span><span>; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">for</span><span>&nbsp;(</span><span class="keyword">int</span><span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;1000000;&nbsp;i++) &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t&nbsp;=&nbsp;((</span><span class="keyword">int</span><span>)ManagePowerType.CategoryManage&nbsp;&amp;&nbsp;(</span><span class="keyword">int</span><span>)&nbsp;ManagePowerType.UserGroupManage)&nbsp;==&nbsp;(</span><span class="keyword">int</span><span>)&nbsp;ManagePowerType.UserGroupChange; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">void</span><span>&nbsp;TT2() &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ArrayList&nbsp;list&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;ArrayList(); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">for</span><span>&nbsp;(</span><span class="keyword">int</span><span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;1000000;&nbsp;i++) &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list.Add(i); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">void</span><span>&nbsp;TT3() &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">bool</span><span>&nbsp;t&nbsp;=&nbsp;</span><span class="keyword">false</span><span>; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">for</span><span>&nbsp;(</span><span class="keyword">int</span><span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;1000000;&nbsp;i++) &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t&nbsp;=&nbsp;(ManagePowerType.CategoryManage&nbsp;&amp;&nbsp;ManagePowerType.UserGroupManage)&nbsp;==&nbsp;ManagePowerType.UserGroupChange; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">class</span><span>&nbsp;Test&nbsp;{&nbsp;</span><span class="keyword">int</span><span>&nbsp;t&nbsp;=&nbsp;1;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;T&nbsp;{&nbsp;</span><span class="keyword">get</span><span>&nbsp;{&nbsp;</span><span class="keyword">return</span><span>&nbsp;t;&nbsp;}&nbsp;}&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">void</span><span>&nbsp;TT4() &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">bool</span><span>&nbsp;t&nbsp;=&nbsp;</span><span class="keyword">false</span><span>; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">for</span><span>&nbsp;(</span><span class="keyword">int</span><span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;1000000;&nbsp;i++) &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t&nbsp;=&nbsp;</span><span class="string">&quot;IAMINT&quot;</span><span>.IndexOf(</span><span class="string">'A'</span><span>)&nbsp;&gt;&nbsp;0; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
</ol>
</div>]]></description>
    </item>
    <item>
      <link>http://max.cszi.com/Blog/Blog.aspx?Id=677</link>
      <title><![CDATA[权限设计中的"依赖颠倒"]]></title>
      <author>一线风</author>
      <category>项目文档</category>
      <pubDate>2009-6-8 13:49:29</pubDate>
      <guid>http://max.cszi.com/Blog/Blog.aspx?Id=677</guid>
      <comments>
              /Blog/Blog.aspx?Id=677#commentbox
            </comments>
      <description><![CDATA[<p>一直在想，可是进度不是很尽人意呀．<br />
目前的想法是：<br />
1.　具体模块的权限设定写在配置文件里．通过类似于反射或是反序列化来映射到不同的模块上（可动太增加，这样多少插件来了也不怕）<br />
2.　权限验证要灵活，不能像现在这样写死在方法里了（典型的面向过程编程呀）．初步想到可能要用到工厂方法模式［目前本人这方面欠缺，正在学习中］</p>
<p>-----------无奈的分割线---------------</p>
<p>今天[2009-6-8]想到,为什么我们要把权限绑定到角色上呢? 如果反过来呢? 比如某一方法(或是模块)用的权限,我给一个资源Id(Gid) 然后将这个Gid和角色映射起来(应该也能用到OO里面的重载来实现)! 这样,新的模块出来了,只需要分配新的Gid和新的角色映射即可,而不是再预先想到某些模块可能用到什么权限.</p>
<p>可能说的不是很清楚,不过大家有什么好点子,欢迎提出来呀!</p>
<p>&nbsp;</p>]]></description>
    </item>
    <item>
      <link>http://max.cszi.com/Blog/Blog.aspx?Id=661</link>
      <title><![CDATA[再一次被编码折腾!]]></title>
      <author>一线风</author>
      <category>项目文档</category>
      <pubDate>2009-4-21 17:22:06</pubDate>
      <guid>http://max.cszi.com/Blog/Blog.aspx?Id=661</guid>
      <comments>
              /Blog/Blog.aspx?Id=661#commentbox
            </comments>
      <description><![CDATA[<p>Xhtml设计文档采用的是UTF-8编码,而Js则是直接创建的文本文件(默认ANSI)编码的. 结果折腾了好久,老是在IE下提示有一行缺少&quot;}&quot; ,而在FF下是正常的. 把Js编码改为UTF-8 结果正常. 哎~~~ 折腾.</p>]]></description>
    </item>
    <item>
      <link>http://max.cszi.com/Blog/Blog.aspx?Id=657</link>
      <title><![CDATA[Jquery小插件,根据css名称自动绑定相关事件.]]></title>
      <author>一线风</author>
      <category>项目文档</category>
      <pubDate>2009-4-20 14:33:35</pubDate>
      <guid>http://max.cszi.com/Blog/Blog.aspx?Id=657</guid>
      <comments>
              /Blog/Blog.aspx?Id=657#commentbox
            </comments>
      <description><![CDATA[<p>CSCMS正式开工了, 里面有用到样式的切换,看到动网的办法是直接写的javascript, 因为最近看了一下JQuery发现真的是小巧精悍,比较喜欢.就用上了.先放出来,嘿嘿,最学乍练的.有啥不对的提出来.</p>
<div class="codeText">
<div class="codeHead">jquery.formStyle.js</div>
<ol class="dp-c">
    <li class="alt"><span><span class="comment">/** </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">*&nbsp;author&nbsp;:&nbsp;atwind </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">*&nbsp;url&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;http://max.cszi.com </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">*&nbsp;use&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;$(function(){$(&quot;.objClassName&quot;).formStyle({className:&quot;button_on&quot;});}; </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">**/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>$.fn.formStyle&nbsp;=&nbsp;</span><span class="keyword">function</span><span>(options)&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;settings&nbsp;=&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;version&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp;&nbsp;</span><span class="string">'0.10'</span><span>,&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;onEvent&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp;&nbsp;</span><span class="string">'hover'</span><span>,&nbsp;</span><span class="comment">//focus,blur,hover&nbsp;is&nbsp;default </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;className&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp;&nbsp;</span><span class="string">''</span><span>&nbsp;&nbsp;</span><span class="comment">//事件发生时切换的样式 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;}; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(options)&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$.extend(settings,&nbsp;options); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;eStyle&nbsp;=&nbsp;settings[</span><span class="string">'onEvent'</span><span>]&nbsp;; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(eStyle&nbsp;==&nbsp;</span><span class="string">'hover'</span><span>) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.hover(</span><span class="keyword">function</span><span>(){$(</span><span class="keyword">this</span><span>).addClass(settings[</span><span class="string">'className'</span><span>]);},</span><span class="keyword">function</span><span>(){$(</span><span class="keyword">this</span><span>).removeClass(settings[</span><span class="string">'className'</span><span>]);}); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(eStyle&nbsp;==&nbsp;</span><span class="string">'focus'</span><span>) &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.bind(</span><span class="keyword">function</span><span>(){$(</span><span class="keyword">this</span><span>).addClass(settings[</span><span class="string">'className'</span><span>]);});&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(eStyle&nbsp;==&nbsp;</span><span class="string">'blur'</span><span>) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.bind(</span><span class="keyword">function</span><span>(){$(</span><span class="keyword">this</span><span>).removeClass(settings[</span><span class="string">'className'</span><span>]);}); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>}; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
</ol>
</div>]]></description>
    </item>
    <item>
      <link>http://max.cszi.com/Blog/Blog.aspx?Id=612</link>
      <title><![CDATA[用Jquery实选Checkbox的全部选中和按样式类名分组选中]]></title>
      <author>一线风</author>
      <category>项目文档</category>
      <pubDate>2009-3-5 15:18:34</pubDate>
      <guid>http://max.cszi.com/Blog/Blog.aspx?Id=612</guid>
      <comments>
              /Blog/Blog.aspx?Id=612#commentbox
            </comments>
      <description><![CDATA[<p>还是权限部分的东东,因为要一个个的手选实在是太麻烦了,为什么不用JQuery呢?</p>
<div class="codeText">
<div class="codeHead">JavaScript代码</div>
<ol class="dp-c">
    <li class="alt"><span><span>&lt;script&nbsp;language=</span><span class="string">&quot;javascript&quot;</span><span>&nbsp;type=</span><span class="string">&quot;text/javascript&quot;</span><span>&nbsp;src=</span><span class="string">&quot;/Scripts/jquery-1.2.6.pack.js&quot;</span><span>&nbsp;&gt;&lt;/script&gt; &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&lt;script&nbsp;type=</span><span class="string">&quot;text/javascript&quot;</span><span>&gt; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&lt;!-- &nbsp;&nbsp;</span></li>
    <li class=""><span class="comment">//全部 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="keyword">function</span><span>&nbsp;unCheckAll&nbsp;()&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;$(</span><span class="string">&quot;input:checkbox&quot;</span><span>).attr(</span><span class="string">'checked'</span><span>,&nbsp;</span><span class="keyword">false</span><span>); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="comment">//组选中 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span class="keyword">function</span><span>&nbsp;unCheckGroup(clas,isCheck){ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;$(</span><span class="string">&quot;.&quot;</span><span>+clas).each(</span><span class="keyword">function</span><span>(){&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.checked&nbsp;=&nbsp;isCheck;}); &nbsp;&nbsp;</span></li>
    <li class=""><span>} &nbsp;&nbsp;</span></li>
    <li class="alt"><span class="comment">//--&gt; </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&lt;/script&gt;&nbsp;&nbsp;</span></li>
</ol>
</div>]]></description>
    </item>
    <item>
      <link>http://max.cszi.com/Blog/Blog.aspx?Id=610</link>
      <title><![CDATA[在XSLT中的XPath表达式用使用变量]]></title>
      <author>一线风</author>
      <category>项目文档</category>
      <pubDate>2009-3-5 11:56:04</pubDate>
      <guid>http://max.cszi.com/Blog/Blog.aspx?Id=610</guid>
      <comments>
              /Blog/Blog.aspx?Id=610#commentbox
            </comments>
      <description><![CDATA[<p>这几天在写权限的时候,使用Xslt的转换过程中,因为要在Xpath表达式中用使用变量来进行路径筛选,想当然用的使用 <strong><font color="#800000">&lt;xsl:value-of select=&quot;$Permission/$Name&quot; /&gt;</font></strong> (<font color="#0000ff">$Name</font>是在循环中已经获取值的变量) 当然,出错了.</p>
<p>网上查了一下,好像也没有这种类似的选择, 准备用choose来手动写的时候,早上问了一下slightboy,结果问题就解决了,嘿嘿~~~ $Permission/*[name()=$Name](这种是查找出Permission下一级的名字为变量$Name的) ,&nbsp;<strong><font color="#800000"> </font></strong><a href="mailto:$Permission/@*[name()=$name"><strong><font color="#800000">$Permission/@*[name()=$name</font></strong></a><strong><font color="#800000">]</font></strong> (这种是查找出Permission下一级属性的名字为变量$Name的) 嘿嘿,简单的循环就搞定一大片.</p>
<p>plus:这些天真是郁闷,天天下雨,最近还晚上下雨,我的鞋子呀,已经一个多月了,还是湿的,昨天晚上还把被单给都淋湿了.哎~~~~</p>]]></description>
    </item>
    <item>
      <link>http://max.cszi.com/Blog/Blog.aspx?Id=607</link>
      <title><![CDATA[关于.Net架构中对象的分类]]></title>
      <author>一线风</author>
      <category>项目文档</category>
      <pubDate>2009-3-2 11:18:52</pubDate>
      <guid>http://max.cszi.com/Blog/Blog.aspx?Id=607</guid>
      <comments>
              /Blog/Blog.aspx?Id=607#commentbox
            </comments>
      <description><![CDATA[<p><font style="font-size: 12pt" face="Verdana"><strong style="font-size: 14pt">对象定义</strong> <br />
数据对象 （Data Object) <br />
数据存储对象 （Data Access Object） <br />
业务对象 （Biz Object) <br />
业务对象工厂 （Object Factory) <br />
共用逻辑对象 （CommonLogic Object) <br />
应用对象 （Application Object） </font></p>
<p><span style="font-size: 12pt">结果对象 （ResultObject）&nbsp;<br />
<img alt="架构" border="0" src="/Upload/2009_03/02_111549_8514778_thumb.jpg" /><br />
</span></p>
<p><img alt="" src="/Upload/2009_03/02_111606_1116800.jpg" /></p><p><font face="Verdana"><strong style="font-size: 12pt">数据对象 （Data Object) <br />
</strong>数据对象 基本是 Data Entity 在 application 里的表现方法。 大体来说， 每一个数据库的主要表都会有一个对应的 数据对象。 数据对象本身没有method， 所以他的功能和 C 的structure 差不多。 数据的来源可能是数据库表， XML 文档， 或是 file 理的资料 </font></p>
<p><font face="Verdana"><strong><span style="font-size: 12pt"><font face="Verdana"><strong>数据存储对象 （Data Access Object）</strong> </font></span></strong><br />
数据存储对象基本上是一些 method 来处理对应的数据对象。 入股数据对象的数据来源是数据库的表。Data Access Object </font></p>
<p><font face="Verdana"><span style="font-size: 12pt"><font face="Verdana"><strong>业务对象 （Biz Object) </strong></font></span><br />
业务对象是在 （Business Logic Tier) 里， 它的主要功能是将 一个数据对象(或是一个数据对象集合） 和相关的业务逻辑&quot;包&quot;起来以方便于应用对象的处理。Biz Object 所含的 Data Object 应该是 private （Data Object 是 Biz Object 的一个 Member Attribute， 而所有的行为 （Behavior）都应该经过 Method 来处理。另外，Biz Object 本身是不产生输出的结果给 Presentation(展示) 层的， 但是它可以把自身的资料给传入Result Object。 除了业务对象自身的逻辑， 业务对象本身也会负责对数据库的操作， 但是业务对象 并不会自行 instantiate （实例）， 此类的功能需要依赖 业务对象工厂。 一个业务对象对于本身所含的是一个数据对象或是一个数据对象集合，处理逻辑和方法可能会不一样。 <br />
一个处理数据对象的业务对象在取名时用单数， 一个处理数据对象集合的业务对象在取名时用复数。 </font></p>
<p><font face="Verdana">每一个业务对象可以有一个DefaultOutput 方法（method）， 他是把自身实体的一些数据和一些算出来的数据给传入ResultObject 里。祥情请看Result Object。 </font></p>
<p><font face="Verdana"><strong><span style="font-size: 12pt"><font face="Verdana"><strong>业务对象工厂 （Object Factory)</strong> </font></span></strong><br />
业务对象工厂 是在 （Business Logic Tier）里被应用， 它的主要功能是产生一个空的业务对象或是从数据库里产生一个新的业务对象。 有讨论把所有的数据的操作放在业务对象工厂里，这样每一个对象的工作可以分的更仔细。如果需要， 我们以后会在这儿做调整。 <br />
共用逻辑对象 （CommonLogic Object) <br />
共用罗辑对象应该是在 （Buisness Logic Tier) 里被应用的。它的应用是当一个逻辑需要两个或是两个以上 Biz Object 时而产生结果的， 而且这个逻辑会被不同的用例而使用。 </font></p>
<p><font face="Verdana"><strong><span style="font-size: 12pt"><font face="Verdana"><strong>应用对象 （Application Object）</strong> </font></span></strong><br />
应用对象 是在 （Business Logic Tier) 里。 它的主要工能如下 <br />
接受页面层的请求和理解（interpret）请求的参数 <br />
掉动和instantiate（实例化）业务对象 <br />
处理业务逻辑 <br />
可以调动共有罗辑对象 <br />
产生输出和把输出的结果放入Result Obj </font></p>
<p><font face="Verdana"><strong><span style="font-size: 12pt"><font face="Verdana"><strong>结果对象 （ResultObject）</strong> </font></span></strong><br />
Result Object 是一个&lsquo;一般对象&rsquo;。对于表现层的请求， 业务逻辑层返回的是一个统一的 Result Object， 而Result Object 的内容是自定对象， 负责表现层和业务层的开发人员要事先只到里面的定义是什么. ResultObject? 可以比喻为一个XML 的文档。 基本上他只是用来把资料从Business Tier (业务层)带到 Presentation Tier(表现层) 的， A data carrier （数据传输工具）。他可以运输 一个或是多个业务对象的资料。 <br />
Result Object 本身并没有自己的Method。他可以被应用于对象或是业务对象操作。 </font></p>
<p><font face="Verdana"><br />
</font>
<p>转自:http://www.cnblogs.com/putishu/archive/2009/03/01/1400969.html</p>
<p><font face="Verdana">刚才在CNBlogs上看到的, 有时发现发布是个比较头痛的事情,嘿嘿,感觉还要进一步的整理.</font></p>
</p>]]></description>
    </item>
    <item>
      <link>http://max.cszi.com/Blog/Blog.aspx?Id=605</link>
      <title><![CDATA[C#:隐式转换,显示转换在CSWave.CSBlog中的应用.]]></title>
      <author>一线风</author>
      <category>项目文档</category>
      <pubDate>2009-2-26 14:44:12</pubDate>
      <guid>http://max.cszi.com/Blog/Blog.aspx?Id=605</guid>
      <comments>
              /Blog/Blog.aspx?Id=605#commentbox
            </comments>
      <description><![CDATA[<p>在CSBlog中的配置文件里,保存的是序列化后的Xml文档格式的信息,这种方式的好处是意义明确,易于扩展,并且不需要不停的修改数据库的字段.只要改变了程序,就能自动的进行升级.</p>
<p>在XML文档与对象的互相转换过程是,CSBlogV2.11以前的版本都是在方法里手动处理的,这样做不利于复用并且也比较容易出错,所以在今后的版本中,所有的要序列化成XML数据保存的对象都继承一个XmlComponentBase类.</p>
<div class="codeText">
<div class="codeHead">XmlComponentBase</div>
<ol class="dp-c">
    <li class="alt"><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">abstract</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;XmlComponentBase &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;{ </span>&nbsp;</li>
    <li class="alt"><span><span class="preprocessor">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#region&nbsp;与String类型的互相转换 </span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">///&nbsp;&lt;summary&gt; </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">///&nbsp;转换为标准的Xml文档 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">///&nbsp;&lt;/summary&gt; </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">///&nbsp;&lt;returns&gt;&lt;/returns&gt; </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">string</span><span>&nbsp;ToXml() &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;Serializer.XmlSerializerToXml(</span><span class="keyword">this</span><span>); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">///&nbsp;&lt;summary&gt; </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">///&nbsp;序列化成Xml的文本片断 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">///&nbsp;&lt;/summary&gt; </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">///&nbsp;&lt;returns&gt;&lt;/returns&gt; </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">override</span><span>&nbsp;</span><span class="keyword">string</span><span>&nbsp;ToString() &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;Serializer.XmlSerializerToText(</span><span class="keyword">this</span><span>); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} </span>&nbsp;</li>
    <li class=""><span>&nbsp;</span></li>
    <li class="alt"><span><span class="preprocessor">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#endregion </span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
</ol>
</div>
<p>此类有两个方法,一个是ToXml()生成标准的XML文档保存至数据库,ToString()方法是生成Xml的片断,以挂接在要输出的进行转换的XML中.</p><p>然后在具体的对象类里增加两个方法:</p>
<div class="codeText">
<div class="codeHead">C#代码</div>
<ol class="dp-c">
    <li class="alt"><span><span class="preprocessor">#region&nbsp;显隐式转换 </span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="comment">///&nbsp;&lt;summary&gt; </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span class="comment">///&nbsp;显示将字符串转换为对象 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="comment">///&nbsp;&lt;/summary&gt; </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span class="comment">///&nbsp;&lt;param&nbsp;name=&quot;value&quot;&gt;&lt;/param&gt; </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="comment">///&nbsp;&lt;returns&gt;&lt;/returns&gt; </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">explicit</span><span>&nbsp;</span><span class="keyword">operator</span><span>&nbsp;Statistic(</span><span class="keyword">string</span><span>&nbsp;value) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>&nbsp;(String.IsNullOrEmpty(value)) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;</span><span class="keyword">new</span><span>&nbsp;Statistic(); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;(Statistic)Serializer.XmlDeserializerFormText(</span><span class="keyword">typeof</span><span>(Statistic),&nbsp;value); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="comment">///&nbsp;&lt;summary&gt; </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span class="comment">///&nbsp;隐式将对象本身转为Xml文档 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="comment">///&nbsp;&lt;/summary&gt; </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span class="comment">///&nbsp;&lt;param&nbsp;name=&quot;value&quot;&gt;&lt;/param&gt; </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="comment">///&nbsp;&lt;returns&gt;&lt;/returns&gt; </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">implicit</span><span>&nbsp;</span><span class="keyword">operator</span><span>&nbsp;String(Statistic&nbsp;value) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;Serializer.XmlSerializerToXml(value); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>} </span>&nbsp;</li>
    <li class=""><span>&nbsp;</span></li>
    <li class="alt"><span><span class="preprocessor">#endregion</span><span>&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<p>这样对象与String之间的转换就方便得多,复用性也得到了提高.<br />
<br />
-------------------------------------------------------</p>
<p>显隐式转换的语法如下:</p>
<h4><strong>operator</strong></h4>
<p><em>operator</em> 关键字用于在类或结构声明中声明运算符。运算符声明可以采用下列四种形式之一：</p>
<ol>
    <li>
    <pre><span style="color: #0000ff">public</span> <span style="color: #0000ff">static</span> result-type <span style="color: #0000ff">operator</span> unary-operator ( op-type operand )</pre>
    </li>
    <li>
    <pre><span style="color: #0000ff">public</span> <span style="color: #0000ff">static</span> result-type <span style="color: #0000ff">operator</span> binary-operator (
    op-type operand,
    op-type2 operand2
    )</pre>
    </li>
    <li>
    <pre><span style="color: #0000ff">public</span> <span style="color: #0000ff">static</span> <span style="color: #0000ff">implicit</span> <span style="color: #0000ff">operator</span> conv-type-out ( conv-type-in operand )</pre>
    </li>
    <li>
    <pre><span style="color: #0000ff">public</span> <span style="color: #0000ff">static</span> <span style="color: #0000ff">explicit</span> <span style="color: #0000ff">operator</span> conv-type-out ( conv-type-in operand )</pre>
    </li>
</ol>
<p><u>参数</u>：</p>
<ol>
    <li>result-type 运算符的结果类型。</li>
    <li>unary-operator 下列运算符之一：+ - ! ~ ++ &mdash; true false</li>
    <li>op-type 第一个（或唯一一个）参数的类型。</li>
    <li>operand 第一个（或唯一一个）参数的名称。</li>
    <li>binary-operator 其中一个：+ - * / % &amp; | ^ &lt;&lt; &gt;&gt; == != &gt; &lt; &gt;= &lt;=</li>
    <li>op-type2 第二个参数的类型。</li>
    <li>operand2 第二个参数的名称。</li>
    <li>conv-type-out 类型转换运算符的目标类型。</li>
    <li>conv-type-in 类型转换运算符的输入类型。</li>
</ol>
<p><u>注意</u>：</p>
<ol>
    <li>前两种形式声明了用户定义的重载内置运算符的运算符。并非所有内置运算符都可以被重载（请参见<a target="_blank" href="ms-help://ms.msdnqtr.v80.chs/390d9d01-79fc-40ab-9ed3-0bf448da1b6a.htm">可重载的运算符</a>）。op-type 和 op-type2 中至少有一个必须是<em>封闭类型</em>（即运算符所属的类型，或理解为<em>自定义的类型</em>）。例如，这将防止重定义整数加法运算符。</li>
    <li>后两种形式声明了转换运算符。conv-type-in 和 conv-type-out 中正好有一个必须是封闭类型（即，转换运算符只能从它的封闭类型转换为其他某个类型，或从其他某个类型转换为它的封闭类型）。</li>
    <li>运算符只能采用值参数，不能采用 <a target="_blank" href="http://www.cnblogs.com/hunts/archive/2007/01/13/619620.html">ref</a> 或 <a target="_blank" href="http://www.cnblogs.com/hunts/archive/2007/01/13/619620.html">out</a> 参数。</li>
    <li>C# 要求成对重载比较运算符。如果重载了==，则也必须重载!=，否则产生编译错误。同时，比较运算符必须返回bool类型的值，这是与其他算术运算符的根本区别。</li>
    <li>C# 不允许重载=运算符，但如果重载例如+运算符，编译器会自动使用+运算符的重载来执行+=运算符的操作。</li>
    <li>运算符重载的其实就是函数重载。首先通过指定的运算表达式调用对应的运算符函数，然后再将运算对象转化为运算符函数的实参，接着根据实参的类型来确定需要调用的函数的重载，这个过程是由编译器完成。</li>
    <li>任何运算符声明的前面都可以有一个可选的<a href="ms-help://ms.msdnqtr.v80.chs/ae334cee-d96c-4243-a5e3-06dd7fcaf205.htm">属性（C# 编程指南）</a>列表。</li>
</ol>
<h4><strong>explicit</strong></h4>
<p><em>explicit</em> 关键字用于声明必须使用强制转换来调用的用户定义的类型转换运算符。</p>
<blockquote>
<pre><span style="color: #0000ff">static</span> <span style="color: #0000ff">explicit</span> <span style="color: #0000ff">operator</span> target_type { source_type identifier }</pre>
</blockquote>
<p><u>参数</u>：</p>
<ol>
    <li>target_type 目标类型</li>
    <li>source_type 源类型。</li>
    <li>identifier Something。</li>
</ol>
<p><u>注意</u>：</p>
<ol>
    <li>转换运算符将源类型转换为目标类型。源类型提供转换运算符。与隐式转换不同，必须通过强制转换的方式来调用显式转换运算符。如果转换操作可能导致异常或丢失信息，则应将其标记为 explicit。这可以防止编译器无提示地调用可能产生无法预见后果的转换操作。</li>
</ol>
<h4><strong>implicit</strong></h4>
<p><em>implicit </em>关键字用于声明隐式的用户定义类型转换运算符。</p>
<blockquote>
<pre><span style="color: #0000ff">static</span> <span style="color: #0000ff">implicit</span> <span style="color: #0000ff">operator</span> target_type { source_type identifier }</pre>
</blockquote>
<pre><u>注意</u>：</pre>
<ol>
    <li>隐式转换可以通过消除不必要的类型转换来提高源代码的可读性。但是，因为可以在程序员未指定的情况下发生隐式转换，因此必须注意防止令人不愉快的后果。一般情况下，隐式转换运算符应当从不引发异常并且从不丢失信息，以便可以在程序员不知晓的情况下安全使用它们。如果转换运算符不能满足那些条件，则应将其标记为 explicit。</li>
</ol>]]></description>
    </item>
    <item>
      <link>http://max.cszi.com/Blog/Blog.aspx?Id=591</link>
      <title><![CDATA[权限的设计思路]]></title>
      <author>一线风</author>
      <category>项目文档</category>
      <pubDate>2009-2-5 15:46:41</pubDate>
      <guid>http://max.cszi.com/Blog/Blog.aspx?Id=591</guid>
      <comments>
              /Blog/Blog.aspx?Id=591#commentbox
            </comments>
      <description><![CDATA[<p>目前CSBlogV2里的权限，是由角色里的一个属性来判断具体的功能模块的开放和禁止权限。但是这样的设计是非常错误的。因为功能模块可能会不同的增加和修改。</p>
<p>那么如何设计出扩展性能好，优秀实用的权限判断呢？想一想Windows系统里对每个文件夹的权限设定，他是针对角色来的，而不是由色来判断功能，而是由功能来开放和禁止角色的相关操作。</p>
<p>下一步的重大改进，角色权限判断的重新设计。</p>]]></description>
    </item>
    <item>
      <link>http://max.cszi.com/Blog/Blog.aspx?Id=568</link>
      <title><![CDATA[CSBlog主题与皮肤的制作与定制简单介绍]]></title>
      <author>一线风</author>
      <category>项目文档</category>
      <pubDate>2009-1-4 9:35:01</pubDate>
      <guid>http://max.cszi.com/Blog/Blog.aspx?Id=568</guid>
      <comments>
              /Blog/Blog.aspx?Id=568#commentbox
            </comments>
      <description><![CDATA[<p><strong><font color="#ff0000">先说简单的，皮肤(Style)：<br />
</font></strong>&nbsp;制作皮肤是比较简单的，只需要找到<font style="background-color: #ffcc00">/App_Themes/Theme/Style/Skin.css</font>　然后<strong>更改CSS里的内容</strong>就OK了．至少要对CSS有一定的了解．可以下个CSS样式手册自已看看．CSS里面的应用到区块上样式我都做了注解了．<br />
&nbsp;<br />
&nbsp;然后就是比较高级点的，你可能想自已增加样式应用到某些地方，或是<strong><font color="#ff0000">对显示的结构进行更改</font></strong>，比如下面拉动的改成左右拉动．<strong><font color="#ff6600">甚至直接用Flash来渲染</font></strong>．　这时候仅是修改CSS是无论如何也做不到的，那么只能修改主题了．</p><p><strong><font color="#ff0000">主题修改(xslt)：</font></strong><br />
&nbsp;<strong>修改主题其实就是修改xslt模板</strong>，<font style="background-color: #ffff99">xslt模板就是对xml原始数据进行渲染的</font>．想查看输出的原始XML数据，只需要修改coreSettings.config里的 debug=&quot;true&quot;&nbsp;&nbsp; renderOption=&quot;xml&quot;　就会直接输出XML．<br />
&nbsp;<br />
&nbsp;比如，有一个集合，它的路径是：CSWave.Xml/Blogs/Blog 我们想对其进行操作就只需要两步即可．<br />
&nbsp;一，定义一个变理获取集合值：&lt;xsl:variable name=&quot;Blogs&quot; select=&quot;CSWave.Xml/Blogs/Blog&quot; /&gt;<br />
&nbsp;二，渲染已经定义的变量：<br />
&nbsp;&nbsp;&nbsp;</p>
<div class="codeText">
<div class="codeHead">XML/HTML代码</div>
<ol class="dp-xml">
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">xsl:for-each</span><span>&nbsp;</span><span class="attribute">select</span><span>=</span><span class="attribute-value">&quot;$Blogs&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">a</span><span>&nbsp;</span><span class="attribute">href</span><span>=</span><span class="attribute-value">&quot;/Blog/Blog.aspx?Id={@Id}&quot;</span><span class="tag">&gt;</span><span>&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">xsl:value-of</span><span>&nbsp;</span><span class="attribute">select</span><span>=</span><span class="attribute-value">&quot;@Title&quot;</span><span>&nbsp;&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">a</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">xsl:for-each</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
</ol>
</div>
<p>&nbsp;&nbsp; 这样就把Blog集合给列出来了．是不是超级简单呀？　通过上述的方法就能输出标准的自定的HTML各种结果．甚至可以 修改 &lt;xsl:output　method=&quot;xml&quot; 的输出办法<strong><font color="#ff0000">直接输出XML让Flash读取数据来显示</font></strong>．<br />
&nbsp;&nbsp;<br />
&nbsp;这样就能在不改动任何程序的源代码的情况下，做出你自已喜欢的不同的主题和样式．<br />
&nbsp;<br />
&nbsp;<br />
总结：可以通过<strong><font color="#339966">CSS</font></strong>直接更改同一个主题下的<strong><font color="#339966">皮肤</font></strong>．但是不能更改网页显示的架构．所以如果想改变<strong><font color="#800000">显示的架构</font></strong>，就只能改变<font color="#800000">主题</font>．一般情况下只需改改样式就能得出漂亮的不同的风格的皮肤．</p>
<p>大家如果在制作皮肤的过程中有什么问题，欢迎提出！</p>]]></description>
    </item>
    <item>
      <link>http://max.cszi.com/Blog/Blog.aspx?Id=567</link>
      <title><![CDATA[2009年新年主题与皮肤的制作完成啦~]]></title>
      <author>一线风</author>
      <category>项目文档</category>
      <pubDate>2009-1-4 9:29:41</pubDate>
      <guid>http://max.cszi.com/Blog/Blog.aspx?Id=567</guid>
      <comments>
              /Blog/Blog.aspx?Id=567#commentbox
            </comments>
      <description><![CDATA[<p>从1号晚上21:30开始一直做到凌晨的4:10 一直在做这个2009年的皮肤，好在在前几天就从网上下到了2009年新相关的图片资源．对于背景的处理实在是不好搞，都差不多有三年没有好好的深入搞过CSS了，好多地方实在是想不到乍处理．晚上睡觉的时候梦到还有一个z-index可用，早上起来赶紧的试试．</p>
<p>又花了两个多小时才基本搞定，评论框里要是春倒在右边，背景也平铺就好了．不过呢，我想了一会儿也没有更好的办法．先这么来吧！</p>
<p><strong><font color="#800000">二踢脚在下面距左200px，上面要是有个烟花就更好了．不过现在没有．呵！回头找找．</font></strong></p>
<p><font style="background-color: #ffff99" color="#ff0000">FireFox对样式的大小写名称是敏感的即比较严格的，而IE则不是即IE的容错性比较好。</font></p>
<p>在电脑前面呆的时间太长了，现在眼睛好痛呀。一用眼镜看显示器就痛。先不搞了，看看JQuery。<br />
<img alt="2009牛气冲天" border="0" src="/Upload/2009_01/04_092933_9722739_thumb.jpg" /><br />
<br />
<strong><font color="#ff0000">欢迎转改，不过请注明一下原出处，谢谢！</font></strong></p>
<p>&nbsp;</p>]]></description>
    </item>
    <item>
      <link>http://max.cszi.com/Blog/Blog.aspx?Id=565</link>
      <title><![CDATA[CSBlogV2.11更新历史]]></title>
      <author>一线风</author>
      <category>项目文档</category>
      <pubDate>2008-12-31 9:48:56</pubDate>
      <guid>http://max.cszi.com/Blog/Blog.aspx?Id=565</guid>
      <comments>
              /Blog/Blog.aspx?Id=565#commentbox
            </comments>
      <description><![CDATA[<p>---2009-1-6---------------<br />
1. 添加RSSLink到Html头里。可以在Maxthond里主动显示RSS地址。呵</p>
<p>----2009-1-5---------------<br />
1. 重新更改一下2009皮肤；<br />
2. 修正分类生成缓存文件时的排序；<br />
3. 修正站点关闭时的联系方式；</p>
<p><br />
----2009-1-4------------------<br />
1. 在Blog编辑页增加一个防掉线的Ajax异步查询，防止长时间编辑Blog内容而意外退出。</p>
<p>----2009-1-3-----------------<br />
1. Ajax服务项目开始</p>
<p>----2009-1-2-------------------<br />
1. 新年样式图片切［搞到4.20了，好久没有搞美工方面的东东．花了5　6　个小时才把大体搞定，不行了．好困呀．先睡了！］<br />
2. 完成新年皮肤样式；<br />
3. 移除Static.config里的数据库名称配置，直接读以文件；<br />
4. 更新为引用评论时不计引用字数，显示评论排行榜时只不显示引用内容，又引入了新的问题；</p>
<p>----2009-1-1--------------------<br />
1. 修正可能出现的重复登录情况;<br />
2. 样式名称规则与调整,参考LBSBlog样式；<br />
3. 爱的滋味主题开始启用；</p>
<p>----2008-12-31------------------<br />
1. 调整模板及样表;</p><p>----2008-12-29-------------------<br />
1. 皮肤功能改为选择，配置文件放在/Config/Static.config里；<br />
2. 新年皮肤开始制作，好汗！哈哈；</p>
<p>----2008-12-27--------------------<br />
1. 修正配置相关备份还原与初始操作后的转向；<br />
2. 移除暂时用不上的基本配置信息；<br />
3. 调整分类排序，目前可支持2级分类，不过Blog被限制只能用一级分类:)；<br />
4. 增加评论时可自动记住用户的呢称信息；</p>
<p>----2008-12-26---------------------<br />
1. 搜索页的关键字及描述动态赋值[SEO]；</p>
<p>----2008-12-25-------------------<br />
1. 将搜索页独立出来，避免职责不清；<br />
2.&nbsp; 修正相关Blog的相样式问题；<br />
<br />
----2008-12-24-------------------<br />
1. 完成基本的URL重写。经简单测试，重写对执行时间消耗基本可以忽略．<br />
2. 页面Title详细具体化．每一页要有一个不同的标题，分类 第几页 . 搜索结果标题．[SEO优化]<br />
3. 优化每页里的关键字，及内容描述.[SEO优化]</p>
<p>----2008-12-23--------------------<br />
1. URL地址重写，汗，又重写？！这个是模板里的逆向重写功能啦，就是自动生成静态地址的。[URL重写时分组时数字查询串尽量用(\d+),纯目录模式下时可以用(.*),数字分页或分类不明的情况下可以用0代替，系统会自动识别]</p>
<p>----2008-12-11--------------------<br />
1. 增加用户信息中心，可以查看自已的注册信息及最近登录日志；<br />
2. 删除Google的广告，在UI.Library.xslt 可替换成自已的广告；</p>
<p>----2008-12-9-----------------------<br />
1. 修正评论排行榜上引用的显示问题;</p>
<p>----2008-12-8-------------------------<br />
1. 修正在ServerContent初始化之前抛出关闭站点异常的Bug;<br />
2. 更新文件上传后的Js改写FCKEditor的Xslt操作代码;<br />
3. 修正基本设定更新与模块设定更新混淆的Bug;<br />
4. 全自动缩略图组,最大的缩略图做为原始图像,最小图像为缩略图;<br />
5. 修正文件上传的权限判断的Bug；</p>
<p>----2008-12-4-----------升级为2.11版本-------------<br />
1. 加入URL重写功能;<br />
2. URL静态链接生成功能,在模板里自动生成静态链接,这个实在是太麻烦,暂时没有比较好的办法.</p>
<p>----2008-12-2------------------------<br />
1. 修正RSS相关错误</p>
<p>----标准化(Xhtml)的CSBlog升级为CSBlogV2.10版本-------</p>
<p>----2008-11-27-------------------------<br />
1. 修正模板定义的变量错误<br />
2. 修正选择自定义的主题Bug</p>
<p>----2008-11-26--------------------------<br />
1. 输出代码标准化为Xhtml</p>]]></description>
    </item>
    <item>
      <link>http://max.cszi.com/Blog/Blog.aspx?Id=561</link>
      <title><![CDATA[URL重写配置说明及模板逆向生成静态链接的相关说明]]></title>
      <author>一线风</author>
      <category>项目文档</category>
      <pubDate>2008-12-25 16:03:36</pubDate>
      <guid>http://max.cszi.com/Blog/Blog.aspx?Id=561</guid>
      <comments>
              /Blog/Blog.aspx?Id=561#commentbox
            </comments>
      <description><![CDATA[<p><strong><font color="#ff0000">/urlMapping.config 是重写的配置文件</font></strong></p>
<p>&lt;urlMappings&nbsp; enabled=&quot;<font color="#ff0000">true</font>&quot;&nbsp;&nbsp; 表示启用重写功能，<font color="#ff00ff">false</font> 时禁用重写功能</p>
<p>重写规则配置：<br />
&nbsp;&nbsp;&nbsp; &lt;add name=&quot;BlogList&quot; defaultUrl=&quot;~/Blog/Default.aspx&quot;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font style="background-color: #ffff99">url=&quot;/Blog/S-{0}-{1}.aspx&quot;<br />
</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font style="background-color: #ccffcc">virtualUrl=&quot;~/Blog/S-(\d+)-(\d+).aspx&quot;<br />
</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font style="background-color: #ccffff"> realUrl=&quot;~/Blog/Default.aspx?CategoryId=$1&amp;amp;Page=$2&quot;<br />
</font>&nbsp;&nbsp;&nbsp; /&gt;<br />
<font style="background-color: #ffff99">url: 模板里逆向生成静态链接的字符串，{0}会被第一个参数自动替换掉，{1}会被第二个参数替换掉，以此类推。<br />
</font><font style="background-color: #ccffcc">virtualUrl: 重写后的路径，和url要对应。</font><br />
<font style="background-color: #ccffff">realUrl: 真实路径,$1会自动替换成virtualUrl里的第一个参数，以此类推</font></p><p>模板里使用的例子：<br />
--------------------------------</p>
<p>Blog列表：<br />
&lt;xsl:variable name=&quot;Url&quot; select=&quot;cs:rewrite('/Blog/Default.aspx?CategoryId={0}','BlogList',@Id)&quot; /&gt;</p>
<p>Blog分类列表：第一个参数是分类Id号，第二个参数是起始页<br />
&lt;xsl:variable name=&quot;CategoryUrl&quot; select=&quot;cs:rewrite('/Blog/Default.aspx?CategoryId={0}','BlogList',$Blog/@CategoryId,1)&quot; /&gt;</p>
<p>Blog详细页：第一个参数是Blog的具体Id号，第二个参数是起始页<br />
&lt;xsl:variable name=&quot;Url&quot; select=&quot;cs:rewrite('/Blog/Blog.aspx?Id={0}','BlogDetail',@Id,'1')&quot; /&gt;</p>
<p>分页基础参数：第一个是分页的XML节点集，第二个是可能的参数（如首列表时为0，分类列表时为分类Id号，Blog评论分页时为Blog的Id）<br />
&lt;xsl:with-param name=&quot;BaseUrl&quot; select=&quot;cs:makePage('/Blog/Blog.aspx','BlogDetail',$Paging,$Blog/@Id)&quot; /&gt;</p>
<p>RSS:只有一个分类Id的参数<br />
&lt;xsl:variable name=&quot;Rss&quot; select=&quot;cs:rewrite('/Blog/Feed.aspx?CategoryId={0}','BlogRss',@Id)&quot; /&gt;</p>
<p>&nbsp;</p>
<p><font style="background-color: #ffff99" color="#ff0000"><strong>注意此功能为CSBlogV2.11版本后才可使用。</strong></font></p>]]></description>
    </item>
    <item>
      <link>http://max.cszi.com/Blog/Blog.aspx?Id=555</link>
      <title><![CDATA[快速把CSBlog里的内容给转到QQ空间里]]></title>
      <author>一线风</author>
      <category>项目文档</category>
      <pubDate>2008-12-20 15:30:00</pubDate>
      <guid>http://max.cszi.com/Blog/Blog.aspx?Id=555</guid>
      <comments>
              /Blog/Blog.aspx?Id=555#commentbox
            </comments>
      <description><![CDATA[<p>1. 打开你自已的QQ邮箱（没有的话只要有QQ就能开通本功能）</p>
<p>2. 点击QQ邮箱左侧最下面的 <strong>阅读空间</strong></p>
<p>3. 最右侧最下面的 <strong>我的订阅 -&gt; 添加</strong></p>
<p>4. 在订阅输入框里填入你的Blog的<strong>Rss订阅地址</strong>，我的是：<a href="http://max.cszi.com/Blog/Feed.aspx">http://max.cszi.com/Blog/Feed.aspx</a>&nbsp; (<em>这个你可以在CSBlog系统的分类菜单左侧的订阅小图标上找到地址，如果要订阅全部就点首页左侧的那个小图标，然后复制地址</em>)</p>
<p>5. 添加后就修改说明和确认页面了，<strong>确认订阅后开始阅读</strong></p>
<p>6. 你可以在这儿直接阅读你的Blog原文的摘要，也可以打开一个具体的Blog,然后看看最下面，是不是有个<strong>转载到QQ空间</strong>的按钮？ 嘿，对就点这个，相信后面的我也不用多说了吧。</p>
<p>只有第一次使用才会填写订阅，以后就不用这么麻烦了，可以直接打开你的阅读空间，点开具体的Blog直接转载。这个功能不错吧？是不是也做个这样的功能集成到CSBlog呢？</p>
<p>&nbsp;</p>]]></description>
    </item>
    <item>
      <link>http://max.cszi.com/Blog/Blog.aspx?Id=531</link>
      <title><![CDATA[Asp.Net里的XML+Xlst输出代码的标准化]]></title>
      <author>一线风</author>
      <category>项目文档</category>
      <pubDate>2008-11-27 16:01:11</pubDate>
      <guid>http://max.cszi.com/Blog/Blog.aspx?Id=531</guid>
      <comments>
              /Blog/Blog.aspx?Id=531#commentbox
            </comments>
      <description><![CDATA[<p>这两天一直在搞XML+Xslt输出的标准化,即输出Xhtml标准的代码</p>
<p><font color="#ff0000"><strong>在.Net2.0的XslCompiledTransform 里 名字空间 xmlns=&quot;</strong></font><a href="http://www.w3.org/1999/xhtml"><font color="#ff0000"><strong>http://www.w3.org/1999/xhtml</strong></font></a><font color="#ff0000"><strong>&quot;&nbsp; 是正确输出xhtml标准的关键<br />
</strong></font>如果没有这个命名空间的话,输出的文档标签会自动去掉结尾的 <strong><font color="#0000ff">/</font></strong> 符号即&lt;meta xxx /&gt; 变成了&lt;meta xxx&gt;</p>
<p><font color="#800080">有两种角决的办法:<br />
一,自定义一个XHtmlWrite类,重写一下WriteEndElement() 方法,自已判断那些情况要关闭;<br />
二,就是在模板文件Xlst里加上上面的名字空间啦~ .</font></p>
<p>对于第一种方法,结果就是xslt模板里的所有&lt;xsl:output 里的方法都失去作用,并且输出的格式看起来和W3上的看起来就是不一样.<br />
<br />
对于第二种方法就是输出的结果会自动合并空内容的标签,即&lt;div&gt;&lt;/div&gt;变成了&lt;div /&gt; 这个结果很是让人难受. 目前的解决办法是要么加<strong>&lt;xsl:text&gt; &lt;/xsl:text&gt;</strong> 要么是在不想关闭的标签尾加上 <strong>xml:space=&quot;preserve&quot;&gt;</strong> 并且把结束标签换行.</p>
<p>我不知微软是乍想的,从<strong><font color="#ff0000">XslTransform</font></strong>改到<font color="#ff0000"><strong>XslCompiledTransform</strong> </font>结果就出来这么一个事.哎~</p>
<p>如果有哪位大侠有更好的解决办法,万望提醒一下 .</p>]]></description>
    </item>
    <item>
      <link>http://max.cszi.com/Blog/Blog.aspx?Id=526</link>
      <title><![CDATA[CSBlog主题制作(一)——将XML数据输出为其它格式(XHTML)]]></title>
      <author>一线风</author>
      <category>项目文档</category>
      <pubDate>2008-11-24 17:32:25</pubDate>
      <guid>http://max.cszi.com/Blog/Blog.aspx?Id=526</guid>
      <comments>
              /Blog/Blog.aspx?Id=526#commentbox
            </comments>
      <description><![CDATA[<p>先准备一个XML文件:</p>
<div class="codeText">
<div class="codeHead">Link.xml</div>
<ol class="dp-xml">
    <li class="alt"><span><span class="tag">&lt;?</span><span class="tag-name">xml</span><span>&nbsp;</span><span class="attribute">version</span><span>=</span><span class="attribute-value">&quot;1.0&quot;</span><span>&nbsp;</span><span class="attribute">encoding</span><span>=</span><span class="attribute-value">&quot;utf-8&quot;</span><span class="tag">?&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span class="tag">&lt;</span><span class="tag-name">Links</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">Link</span><span>&nbsp;</span><span class="attribute">Name</span><span>=</span><span class="attribute-value">&quot;Google&quot;</span><span>&nbsp;</span><span class="attribute">Url</span><span>=</span><span class="attribute-value">&quot;http://www.google.com&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">Link</span><span>&nbsp;</span><span class="attribute">Name</span><span>=</span><span class="attribute-value">&quot;LoveCherry&quot;</span><span>&nbsp;</span><span class="attribute">Url</span><span>=</span><span class="attribute-value">&quot;http://www.cnblogs.com/lovecherry&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">Link</span><span>&nbsp;</span><span class="attribute">Name</span><span>=</span><span class="attribute-value">&quot;CSDN.Net&quot;</span><span>&nbsp;</span><span class="attribute">Url</span><span>=</span><span class="attribute-value">&quot;http://www.csdn.net&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">Link</span><span>&nbsp;</span><span class="attribute">Name</span><span>=</span><span class="attribute-value">&quot;博客园&quot;</span><span>&nbsp;</span><span class="attribute">Url</span><span>=</span><span class="attribute-value">&quot;http://www.cnblogs.com/&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">Link</span><span>&nbsp;</span><span class="attribute">Name</span><span>=</span><span class="attribute-value">&quot;污染的Blog&quot;</span><span>&nbsp;</span><span class="attribute">Url</span><span>=</span><span class="attribute-value">&quot;http://blog.csdn.net/wuhuiran&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">Link</span><span>&nbsp;</span><span class="attribute">Name</span><span>=</span><span class="attribute-value">&quot;玩野网&quot;</span><span>&nbsp;</span><span class="attribute">Url</span><span>=</span><span class="attribute-value">&quot;http://www.playes.net/&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">Link</span><span>&nbsp;</span><span class="attribute">Name</span><span>=</span><span class="attribute-value">&quot;AJ：酒吧&quot;</span><span>&nbsp;</span><span class="attribute">Url</span><span>=</span><span class="attribute-value">&quot;http://www.aj98.com/&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">Link</span><span>&nbsp;</span><span class="attribute">Name</span><span>=</span><span class="attribute-value">&quot;才子：才子手记&quot;</span><span>&nbsp;</span><span class="attribute">Url</span><span>=</span><span class="attribute-value">&quot;http://blog.54caizi.com/blog/&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">Link</span><span>&nbsp;</span><span class="attribute">Name</span><span>=</span><span class="attribute-value">&quot;DLL：新的希望&quot;</span><span>&nbsp;</span><span class="attribute">Url</span><span>=</span><span class="attribute-value">&quot;http://www.byval.org/&quot;</span><span>&nbsp;</span><span class="attribute">Title</span><span>=</span><span class="attribute-value">&quot;这不过是一个测试而已&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">Link</span><span>&nbsp;</span><span class="attribute">Name</span><span>=</span><span class="attribute-value">&quot;心灵：木鸟原创&quot;</span><span>&nbsp;</span><span class="attribute">Url</span><span>=</span><span class="attribute-value">&quot;http://www.psder.com/&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">Link</span><span>&nbsp;</span><span class="attribute">Name</span><span>=</span><span class="attribute-value">&quot;含笑修行's&nbsp;blog&quot;</span><span>&nbsp;</span><span class="attribute">Url</span><span>=</span><span class="attribute-value">&quot;http://blog.knoweb.cn/&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">Link</span><span>&nbsp;</span><span class="attribute">Name</span><span>=</span><span class="attribute-value">&quot;天擎科技&quot;</span><span>&nbsp;</span><span class="attribute">Url</span><span>=</span><span class="attribute-value">&quot;http://www.69sea.com&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">Link</span><span>&nbsp;</span><span class="attribute">Name</span><span>=</span><span class="attribute-value">&quot;黑妹博客&quot;</span><span>&nbsp;</span><span class="attribute">Url</span><span>=</span><span class="attribute-value">&quot;http://blog.cnfol.com/xielina82782114&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">Link</span><span>&nbsp;</span><span class="attribute">Name</span><span>=</span><span class="attribute-value">&quot;Devms论坛&quot;</span><span>&nbsp;</span><span class="attribute">Url</span><span>=</span><span class="attribute-value">&quot;http://bbs.devms.com&quot;</span><span>&nbsp;</span><span class="attribute">LogoUrl</span><span>=</span><span class="attribute-value">&quot;/Images/Links/dmfourm.jpg&quot;</span><span>&nbsp;</span><span class="attribute">Title</span><span>=</span><span class="attribute-value">&quot;Asp.Net&nbsp;Commitury.&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="tag">&lt;/</span><span class="tag-name">Links</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
</ol>
</div><p>再准备一个XSLT模板文件</p>
<div class="codeText">
<div class="codeHead">T.xslt</div>
<ol class="dp-xml">
    <li class="alt"><span><span class="tag">&lt;?</span><span class="tag-name">xml</span><span>&nbsp;</span><span class="attribute">version</span><span>=</span><span class="attribute-value">&quot;1.0&quot;</span><span>&nbsp;</span><span class="attribute">encoding</span><span>=</span><span class="attribute-value">&quot;UTF-8&quot;</span><span>&nbsp;</span><span class="tag">?&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="tag">&lt;</span><span class="tag-name">xsl:stylesheet</span><span>&nbsp;</span><span class="attribute">version</span><span>=</span><span class="attribute-value">&quot;2.0&quot;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">xmlns:xsl</span><span>=</span><span class="attribute-value">&quot;http://www.w3.org/1999/XSL/Transform&quot;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="tag">&lt;</span><span class="tag-name">xsl:variable</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;Links&quot;</span><span>&nbsp;</span><span class="attribute">select</span><span>=</span><span class="attribute-value">&quot;/Links/Link&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="tag">&lt;</span><span class="tag-name">xsl:output</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">method</span><span>=</span><span class="attribute-value">&quot;xhtml&quot;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">version</span><span>=</span><span class="attribute-value">&quot;1.0&quot;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">encoding</span><span>=</span><span class="attribute-value">&quot;utf-8&quot;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">omit-xml-declaration</span><span>=</span><span class="attribute-value">&quot;no&quot;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">indent</span><span>=</span><span class="attribute-value">&quot;yes&quot;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">media-type</span><span>=</span><span class="attribute-value">&quot;application/xhtml+xml&quot;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">doctype-public</span><span>=</span><span class="attribute-value">&quot;-//W3C//DTD&nbsp;XHTML&nbsp;1.0&nbsp;Transitional//EN&quot;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">doctype-system</span><span>=</span><span class="attribute-value">&quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span class="tag">&lt;</span><span class="tag-name">xsl:template</span><span>&nbsp;</span><span class="attribute">match</span><span>=</span><span class="attribute-value">&quot;/&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">xsl:call-template</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;T.LinkPanel&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span class="tag">&lt;/</span><span class="tag-name">xsl:template</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span class="tag">&lt;</span><span class="tag-name">xsl:template</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;T.LinkPanel&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="tag">&lt;</span><span class="tag-name">div</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span class="tag">&lt;</span><span class="tag-name">ol</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="tag">&lt;</span><span class="tag-name">xsl:for-each</span><span>&nbsp;</span><span class="attribute">select</span><span>=</span><span class="attribute-value">&quot;$Links&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span class="tag">&lt;</span><span class="tag-name">li</span><span class="tag">&gt;</span><span class="tag">&lt;</span><span class="tag-name">xsl:value-of</span><span>&nbsp;</span><span class="attribute">select</span><span>=</span><span class="attribute-value">&quot;@Name&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span><span class="tag">&lt;/</span><span class="tag-name">li</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="tag">&lt;/</span><span class="tag-name">xsl:for-each</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span class="tag">&lt;/</span><span class="tag-name">ol</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="tag">&lt;/</span><span class="tag-name">div</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span class="tag">&lt;/</span><span class="tag-name">xsl:template</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span class="tag">&lt;/</span><span class="tag-name">xsl:stylesheet</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
</ol>
</div>
<p>&nbsp;</p>
<p>然后就是C#转换代码:</p>
<div class="codeText">
<div class="codeHead">C#代码</div>
<ol class="dp-c">
    <li class="alt"><span><span>XslCompiledTransform&nbsp;xsl&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;XslCompiledTransform(); &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xsl.Load(@</span><span class="string">&quot;C:\Web\T.xslt&quot;</span><span>); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xsl.Transform(@</span><span class="string">&quot;C:\Web\Links.xml&quot;</span><span>,&nbsp;@</span><span class="string">&quot;C:\Web\Link.html&quot;</span><span>);&nbsp;&nbsp;</span></li>
</ol>
</div>
<p>执行后的输出结果:</p>
<div class="codeText">
<div class="codeHead">XML/HTML代码</div>
<ol class="dp-xml">
    <li class="alt"><span><span class="tag">&lt;?</span><span class="tag-name">xml</span><span>&nbsp;</span><span class="attribute">version</span><span>=</span><span class="attribute-value">&quot;1.0&quot;</span><span>&nbsp;</span><span class="attribute">encoding</span><span>=</span><span class="attribute-value">&quot;utf-8&quot;</span><span class="tag">?&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&lt;!DOCTYPE&nbsp;div&nbsp;PUBLIC&nbsp;&quot;-//W3C//DTD&nbsp;XHTML&nbsp;1.0&nbsp;Transitional//EN&quot;&nbsp;&quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="tag">&lt;</span><span class="tag-name">div</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">ol</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">li</span><span class="tag">&gt;</span><span>Google</span><span class="tag">&lt;/</span><span class="tag-name">li</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">li</span><span class="tag">&gt;</span><span>LoveCherry</span><span class="tag">&lt;/</span><span class="tag-name">li</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">li</span><span class="tag">&gt;</span><span>CSDN.Net</span><span class="tag">&lt;/</span><span class="tag-name">li</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">li</span><span class="tag">&gt;</span><span>博客园</span><span class="tag">&lt;/</span><span class="tag-name">li</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">li</span><span class="tag">&gt;</span><span>污染的Blog</span><span class="tag">&lt;/</span><span class="tag-name">li</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">li</span><span class="tag">&gt;</span><span>玩野网</span><span class="tag">&lt;/</span><span class="tag-name">li</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">li</span><span class="tag">&gt;</span><span>AJ：酒吧</span><span class="tag">&lt;/</span><span class="tag-name">li</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">li</span><span class="tag">&gt;</span><span>才子：才子手记</span><span class="tag">&lt;/</span><span class="tag-name">li</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">li</span><span class="tag">&gt;</span><span>DLL：新的希望</span><span class="tag">&lt;/</span><span class="tag-name">li</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">li</span><span class="tag">&gt;</span><span>心灵：木鸟原创</span><span class="tag">&lt;/</span><span class="tag-name">li</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">li</span><span class="tag">&gt;</span><span>含笑修行's&nbsp;blog</span><span class="tag">&lt;/</span><span class="tag-name">li</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">li</span><span class="tag">&gt;</span><span>天擎科技</span><span class="tag">&lt;/</span><span class="tag-name">li</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">li</span><span class="tag">&gt;</span><span>黑妹博客</span><span class="tag">&lt;/</span><span class="tag-name">li</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">li</span><span class="tag">&gt;</span><span>Devms论坛</span><span class="tag">&lt;/</span><span class="tag-name">li</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">ol</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span class="tag">&lt;/</span><span class="tag-name">div</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
</ol>
</div>
<p><br />
怎么样?是不是超简单呀? 呵~~~ <br />
<br />
<strong>待续...</strong></p>]]></description>
    </item>
    <item>
      <link>http://max.cszi.com/Blog/Blog.aspx?Id=522</link>
      <title><![CDATA[CSBlogV2[2.0.1]更新历史一览表]]></title>
      <author>一线风</author>
      <category>项目文档</category>
      <pubDate>2008-11-21 16:09:08</pubDate>
      <guid>http://max.cszi.com/Blog/Blog.aspx?Id=522</guid>
      <comments>
              /Blog/Blog.aspx?Id=522#commentbox
            </comments>
      <description><![CDATA[<p><font color="#999999">----2008-12-4-----------升级为2.11版本-------------<br />
1. 加入URL重写功能;<br />
2. URL静态链接生成功能,在模板里自动生成静态链接,这个实在是太麻烦,暂时没有比较好的办法.</font></p>
<p><font color="#999999">----2008-12-2------------------------<br />
1. 修正RSS相关错误</font></p>
<p><font color="#999999">----标准化(Xhtml)的CSBlog升级为CSBlogV2.10版本-------</font></p>
<p><strong><font color="#808080">CSBlogV2.01 版升级历史终结。</font></strong></p>
<p>----2008-11-27-------------------------<br />
1. 修正模板定义的变量错误<br />
2. 修正选择自定义的主题Bug</p>
<p>----2008-11-26--------------------------<br />
1. 输出代码标准化为Xhtml</p>
<p>----2008-11-24----CSBlogV2_B081124发布-----------------<br />
1. 有的朋友反映放在Handler里的验证码验证码显不出不，现独立成单独的文件；<br />
2. 修正配置更新时的表单值获取错误；<br />
3. 修正评论引用时的乱码；</p>
<p>----2008-11-23----------------------<br />
1. Blog公告改至Blog频道配置；<br />
2. 取消默认主题的硬编码，由扩展的核心配置里读取；<br />
3. 相关Blog最多条数为0时关闭相关Blog的显示；</p>
<p>----2008-11-22---------------------<br />
1. 扩展配置,合理化配置.频道配置分离出基本配置;<br />
2. 上传文件设定改至后台配置里更改,移去核心配置里的上传设定;<br />
3. 自言自语改为从后台博客配置里更改,而不用从模板里更改;<br />
4. 注册时更新用户统计数据，后台加入手动更新blog，评论及用户数量的手动更新;<br />
5. Blog详细页面下增加相关Blog,(通过Tags关键字进行查询);<br />
6. 增加相关文章的开启关闭功能，可人为选择是否显示;<br />
7. 修正IP获取时可能为空的情况<br />
8. 增加IP查询引擎，暂时为外部引擎。</p>
<p>----2008-11-21----------------------<br />
1. 置顶日志自动隐藏，可由用户手动展开摘要;<br />
2. 基本配置扩展开始[WebConfig];</p>
<p>----2008-11-20----CSBlogV2B081120发布-------<br />
1. 自定义错误页面403,404,一般性错误;</p>
<p>----2008-11-18-----------------------------<br />
1. 自定义扩展配置文件及相关代码;</p>
<p>----2008-11-17-------------------------<br />
1. 修正修改已经存在的Blog后阅读统计归0的Bug;</p>
<p>----2008-11-13-------------------------<br />
1. 修正发表日志时更新Blog排行榜的Bug;<br />
2. 只有修改摘要或是修改内容才会附加修改信息;<br />
3. 修正Tags选择时页面弹出的样式;</p>
<p>----2008-11-12----------------------<br />
1. 修正评论榜选择评论的BUG,只显示公开的评论;<br />
2. 后台增加可关闭Access库的文件链接功能;</p>
<p>----2008-11-11----------------------<br />
1. 无限分类是个大麻烦,暂时先凑合着用吧,回头再来搞这个**<br />
2. 显示的自动导航页的链接自动区别,有外部链接的直接显示,不通过site.aspx中转;<br />
3. 分类自动生成XML文件缓存,通过频道自动生成;</p>
<p>----2008-11-8---------------------<br />
1. 新增加一个Style属性(限制当前模块可以使用的最大限分类级数)到Chanel表上,但是显示的时候输出XML模式下一直请求,好像有问题 . 可能是有Channel这个词，使得总是从缓存频道里找;</p>
<p>----2008-11-07-------------------------------<br />
1. 自动菜单功能;<br />
2. 修正删除Blog没有删除对应的评论的BUG<br />
3. 增加初始化当前配置,用以初始化被搞乱的配置;</p>
<p>----2008-11-06----------------------<br />
1. 加入SitePage表，可动态增加相关静态页面;</p>
<p>----2008-11-05----------------------<br />
1. 重写Blog/Edit.aspx页与Blog/Blog.aspx页相关函数,使其更加逻辑合理;<br />
2. 增加评论相关的权限,可读,可发布.可删除;<br />
3. 修正编辑Blog时的错误，及载入Blog、发表Blog、删除Blog时的相关更新;<br />
4. 增加Blog删除功能;<br />
5. 加入关于我们功能页面;</p>
<p>&nbsp;</p>]]></description>
    </item>
    <item>
      <link>http://max.cszi.com/Blog/Blog.aspx?Id=515</link>
      <title><![CDATA[CSBlogV2内测与问题反馈.]]></title>
      <author>一线风</author>
      <category>项目文档</category>
      <pubDate>2008-11-17 10:49:01</pubDate>
      <guid>http://max.cszi.com/Blog/Blog.aspx?Id=515</guid>
      <comments>
              /Blog/Blog.aspx?Id=515#commentbox
            </comments>
      <description><![CDATA[<p>演示地址：<a href="http://csblog.cszi.com">http://csblog.cszi.com</a></p>
<p><font color="#800080">技术特点说明:<br />
----------------------------------------------------------------------------------<br />
1. 分层架构设计<br />
2. 采用XML输出+XSLT模板生成XHTML页面显示的方式，主题更改更容易，更方便。<br />
3. 自定义的web.Config扩展，数据库连接更容易。<br />
<br />
</font><font color="#ff0000" size="3"><strong>目前正在内测中,有需要的请发Email至:zhouyu@69sea.com进行索取,或是加入官方QQ群[24301472]索取.</strong></font></p><p>今天把web.config的扩展配置给基本写完.修正了修改Blog时点击数归零的Bug</p>]]></description>
    </item>
  </channel>
</rss>