<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_代码乱了(靳如坦的技术blog)</title><subtitle type="text">专注于.net,c#,Ajax、Sql Server、SmartClient等相关的开发</subtitle><id>http://feed.cnblogs.com/blog/u/14051/rss</id><updated>2012-05-14T12:58:27Z</updated><author><name>代码乱了</name><uri>http://www.cnblogs.com/jintan/</uri></author><generator>feed.cnblogs.com</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/jintan/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/14051/rss"/><entry><id>http://www.cnblogs.com/jintan/archive/2012/05/14/2500336.html</id><title type="text">健身视频</title><summary type="text"/><published>2012-05-14T12:58:00Z</published><updated>2012-05-14T12:58:00Z</updated><author><name>代码乱了</name><uri>http://www.cnblogs.com/jintan/</uri></author><link rel="alternate" href="http://www.cnblogs.com/jintan/archive/2012/05/14/2500336.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/jintan/archive/2012/05/14/2500336.html"/><content type="html">&lt;embed src="http://player.youku.com/player.php/sid/XMzYyOTMzNjA0/v.swf" quality="high" width="480" height="400" align="center" allowScriptAccess="sameDomain" allowFullscreen="true" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;embed src="http://player.youku.com/player.php/sid/XMjAyODk2NTQ4/v.swf" quality="high" width="480" height="400" align="center" allowScriptAccess="sameDomain" allowFullscreen="true" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;img src="http://www.cnblogs.com/jintan/aggbug/2500336.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/jintan/archive/2012/05/14/2500336.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/jintan/archive/2012/01/01/2309395.html</id><title type="text">2012元旦遭遇坑爹的12306订票网站付了款不出票</title><summary type="text">元旦一早6点爬起来帮朋友定票，铁道部也公布了消息称可以预定12天的票，好吧，我能忍受你的速度巨慢、卡等现象，只要能定到票苦点累点不要紧，终于熬到早上10点，看到有卧铺票，定了5张，共计1661块大洋，订单生成成功，提交订单，支付成功后，回到12306，看到订单还是待支付状态，我就有预感，这次铁定是出问题了，等了20分钟，45分钟过去了，依旧是未支付状态，然后订单被自动取消（据说是按规定下单后45分钟之内为支付的将自动取消）。一直打12306客服电话把我手机打停机都没有人接，彻底崩溃了，我的愤怒极限也爆发了，这次我算是彻底的服了铁道部。 据我在网上看到的情况，和我一样经历的人不在少数，至少...</summary><published>2012-01-01T04:25:00Z</published><updated>2012-01-01T04:25:00Z</updated><author><name>代码乱了</name><uri>http://www.cnblogs.com/jintan/</uri></author><link rel="alternate" href="http://www.cnblogs.com/jintan/archive/2012/01/01/2309395.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/jintan/archive/2012/01/01/2309395.html"/><content type="html">&lt;p&gt;&amp;nbsp; &amp;nbsp; 元旦一早6点爬起来帮朋友定票，铁道部也公布了消息称可以预定12天的票，好吧，我能忍受你的速度巨慢、卡等现象，只要能定到票苦点累点不要紧，终于熬到早上10点，看到有卧铺票，定了5张，共计1661块大洋，订单生成成功，提交订单，支付成功后，回到12306，看到订单还是待支付状态，我就有预感，这次铁定是出问题了，等了20分钟，&lt;/p&gt;&lt;div style="display: inline-block; "&gt;&lt;/div&gt;45分钟过去了，依旧是未支付状态，然后订单被自动取消（据说是按规定下单后45分钟之内为支付的将自动取消）。一直打12306客服电话把我手机打停机都没有人接，彻底崩溃了，我的愤怒极限也爆发了，这次我算是彻底的服了铁道部。&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; 据我在网上看到的情况，和我一样经历的人不在少数，至少是上千人，相同遭遇的网友自发建QQ群"12306吃钱没出票"&lt;/p&gt;&lt;div style="display: inline-block; "&gt;&lt;/div&gt;来维权，其中一个群已有400人，已有三个群，也就是说10多天前就出现这样的现象了，如此明显如此低级的错误，近半个月的时间，居然都没有解决，我不得不怀疑，这个作为国家最有影响力，声称为人民服务的职能机构。你叫我拿什么来相信你，你还有更好的能力来改善铁路运输状况。&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; 作为一个开发人员，我很清楚这么一套订票系统的复杂程度，就算访问量很大，你扛不住，再业余的开发也知道什么叫"事务"，什么叫回滚，订单提交后扣完钱了就不管了？淘宝这么大的交易量为什么没出现过一起这样的事件？我不清楚开发这套订票系统的是一支什么样的团队或者是一家什么样的公司，我只知道，他们真的很业余很业余，&lt;/p&gt;&lt;p&gt;好吧，我列举一下：&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;网站访问速度实在太慢，&lt;/strong&gt;慢得想砸键盘砸鼠标，甚至不时出现超时，无法打开的情况，如果要怪高并发量，我能理解，但是我不能理解的是，腾讯、淘宝、京东、新蛋、凡客人家是怎么做到的，铁道部有国家的大力支持，要带宽有带宽，要硬件有硬件，要人力有人力&lt;/li&gt;&lt;li&gt;&lt;strong&gt;网站界面实在太山寨&lt;/strong&gt;，实在感受不到一点专业，不是一定要强调多好看，至少不能让用户进来后怀疑是走人钓鱼网站。&lt;/li&gt;&lt;li&gt;&lt;strong&gt;发现bug不及时补上。 &lt;/strong&gt;从我遭遇的下订单支付成功后不出票，就凭这一点我实在是很纳闷，你们没有QA部门吗？没有专门的测试团队吗？一个严谨的系统特别是和支付、金额网银相关的系统，没有经过严格的测试居然敢放出来给上亿的客户用？实在是想不通。&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;老百姓挣的都是血汗钱，就这样被无辜的。。。&lt;/div&gt;&lt;p&gt;票没定到，钱却花了，也浪费了宝贵的订票时间，甚至打个12306服务电话被扣了几十块话费而一直是坐席繁忙。。。。你说这种事情谁遇到谁不愤怒。&lt;/p&gt;&lt;p&gt;最后看了一个铁道部的解释觉得很搞笑：&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="font-family: 宋体; line-height: 30px; "&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&lt;strong&gt;记者：有的旅客反映，网上订票时，火车票没订上，但是钱被银行扣走了。这是怎么回事？&lt;br /&gt;答：首先，这种现象是极个别的。请旅客放心，如果车票没订上，钱被扣了，根据人民银行关于银行卡使用的有关规定，银行会在15个工作日内，把钱返还到您的帐户上&lt;/strong&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&amp;nbsp;好吧，几千个人的遭遇也算是算是极个别现象？也罢，15个工作日返回给我，我能再相信你一次吗？好像就算我不相信也得信啊。我还好，还有余钱买票，对于某些农民兄弟、学生朋友们要是被扣了1600块就不知道有没有车费回家过年了。&lt;p&gt;&amp;nbsp;不要怀疑我是进入了钓鱼网站，所有的事情都是发生在www.12306.cn，祝近期要订票的同学不要有和我同样的遭遇。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;还请各位朋友多多支持，&lt;strong&gt;管理员手下留情&lt;/strong&gt;，谢了&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/jintan/aggbug/2309395.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/jintan/archive/2012/01/01/2309395.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/jintan/archive/2011/06/25/2090167.html</id><title type="text">孤独神</title><summary type="text">我站在自然中，感觉不到光，也感觉不到黑暗，一个我无所知的境地，散发着稀少的人味。 拨开草，抚摸着地上的脚印，在一片灰色之后，睁开双眼，看见远处，有一个熟悉的身影在那里， 一动不动，就像一个失去躯壳的灵魂，四周流动的气息，缓缓地穿过他的身体，在冰冷的空气中，无所知觉。 我向他走去，我想问他，我身在何处？我看见他的脸，一张毫无光泽的脸，平淡之中找不到任何表情， 我突然悲哀的发现，他不是别人，他就是我。</summary><published>2011-06-25T06:19:00Z</published><updated>2011-06-25T06:19:00Z</updated><author><name>代码乱了</name><uri>http://www.cnblogs.com/jintan/</uri></author><link rel="alternate" href="http://www.cnblogs.com/jintan/archive/2011/06/25/2090167.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/jintan/archive/2011/06/25/2090167.html"/><content type="html">该文被密码保护。</content></entry><entry><id>http://www.cnblogs.com/jintan/archive/2011/05/26/2057895.html</id><title type="text">ReportViewer 2008 打印出现Error loading resource library. (0x8007007E)和(0x80070006)</title><summary type="text">0x8007007E:之前一直正常使用的ReportViewer,最近打印时，莫名其妙的出现Error loading resource library. (0x8007007E)最后彻底删除才C:盘下的RSClientPrint*.* 文件，重新装控件后就又正常工作了，真是奇怪的问题当然，最快速找到 C:盘下的RSClientPrint*.* 的办法，莫过于用神器：EveryThing了(0x80070006)可能是打印服务没有启动导致</summary><published>2011-05-26T02:23:00Z</published><updated>2011-05-26T02:23:00Z</updated><author><name>代码乱了</name><uri>http://www.cnblogs.com/jintan/</uri></author><link rel="alternate" href="http://www.cnblogs.com/jintan/archive/2011/05/26/2057895.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/jintan/archive/2011/05/26/2057895.html"/><content type="html">&lt;p&gt;0x8007007E&amp;nbsp;:&lt;br /&gt;&lt;/p&gt;&lt;p&gt;之前一直正常使用的ReportViewer,最近打印时，莫名其妙的出现Error loading resource library. (0x8007007E)&lt;/p&gt;&lt;p&gt;最后彻底删除才C:盘下的RSClientPrint*.*&amp;nbsp; 文件，重新装控件后就又正常工作了，真是奇怪的问题&lt;br /&gt;&lt;/p&gt;&lt;p&gt;当然，最快速找到 C:盘下的RSClientPrint*.*&amp;nbsp; 的办法，莫过于用神器：&lt;a href="http://www.voidtools.com/"&gt;EveryThing&lt;/a&gt;了&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;div&gt;(0x80070006)&amp;nbsp;&lt;/div&gt;&lt;p&gt;可能是打印服务没有启动导致&amp;nbsp;&lt;/p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/jintan/aggbug/2057895.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/jintan/archive/2011/05/26/2057895.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/jintan/archive/2011/05/06/2039154.html</id><title type="text">Spire.XLS XXX记录</title><summary type="text">Spire.XLS 是一个很不错的Excel组件，目前的版本是：5.8.5.2Spire.Xls.Workbook.a()方法，清楚方法体的内容nop,ret就可以了，这个方法的目的是在生产Excel的时候生产一个试用信息的Sheet，只要使该方法不做任何事，就达到目的了</summary><published>2011-05-06T09:15:00Z</published><updated>2011-05-06T09:15:00Z</updated><author><name>代码乱了</name><uri>http://www.cnblogs.com/jintan/</uri></author><link rel="alternate" href="http://www.cnblogs.com/jintan/archive/2011/05/06/2039154.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/jintan/archive/2011/05/06/2039154.html"/><content type="html">该文被密码保护。</content></entry><entry><id>http://www.cnblogs.com/jintan/archive/2011/05/05/2037166.html</id><title type="text">VM.xPort.ExcelClient XXX备忘</title><summary type="text">去掉ExcelConnection类中的几个构造函数中licenseManager.Verify()代码，去掉ExcelConnection.Open方法中的抛出异常：Open方法修改后的代码应该是publicoverridevoidOpen(){try{stringstr=y.d(this.GetType().AssemblyQualifiedName);if(str==null){}if(y.c(str)!=y.n){}this.l=ConnectionState.Connecting;this.a(this.i,this.p);this.l=ConnectionState.Open;}c</summary><published>2011-05-04T16:53:00Z</published><updated>2011-05-04T16:53:00Z</updated><author><name>代码乱了</name><uri>http://www.cnblogs.com/jintan/</uri></author><link rel="alternate" href="http://www.cnblogs.com/jintan/archive/2011/05/05/2037166.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/jintan/archive/2011/05/05/2037166.html"/><content type="html">&lt;div&gt;&lt;strong&gt;去掉&lt;a href="http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://VM.xPort.ExcelClient:3.0.0.0/VM.xPort.ExcelClient.ExcelConnection"&gt;ExcelConnection&lt;/a&gt;类中的几个构造函数中licenseManager.V&lt;span class="Apple-style-span" style="font-weight: normal; "&gt;&lt;strong&gt;&lt;div style="display: inline !important; "&gt;erify()代码&lt;/div&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-weight: normal; "&gt;&lt;strong&gt;，&lt;/strong&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;&lt;p&gt;去掉&amp;nbsp;&lt;strong&gt;&lt;a href="http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://VM.xPort.ExcelClient:3.0.0.0/VM.xPort.ExcelClient.ExcelConnection"&gt;ExcelConnection&lt;/a&gt;.Open方法中的抛出异常：&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Open方法修改后的代码应该是&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;override&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Open()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;try&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;str&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;y.d(&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;&lt;span style="color: #000000;"&gt;.GetType().AssemblyQualifiedName);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;(str&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;==&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;null&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;(y.c(str)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;!=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;y.n)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;&lt;span style="color: #000000;"&gt;.l&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;ConnectionState.Connecting;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;&lt;span style="color: #000000;"&gt;.a(&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;&lt;span style="color: #000000;"&gt;.i,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;&lt;span style="color: #000000;"&gt;.p);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;&lt;span style="color: #000000;"&gt;.l&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;ConnectionState.Open;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;catch&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;(Exception&amp;nbsp;exception1)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ProjectData.SetProjectError(exception1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Exception&amp;nbsp;exception&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;exception1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;&lt;span style="color: #000000;"&gt;.l&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;ConnectionState.Closed;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;throw&lt;/span&gt;&lt;span style="color: #000000; "&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/jintan/aggbug/2037166.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/jintan/archive/2011/05/05/2037166.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/jintan/archive/2011/03/29/1998878.html</id><title type="text">Parsing html markup text using MSHTML</title><summary type="text">Introduction:Often working with content in the form of html, I have needed to manipulate the content intelligently. I accomplished this by using regular expressions to "parse" the html to find certain tags. This enabled me to look for certain tags with certain attributes, etc.This works we</summary><published>2011-03-29T07:32:00Z</published><updated>2011-03-29T07:32:00Z</updated><author><name>代码乱了</name><uri>http://www.cnblogs.com/jintan/</uri></author><link rel="alternate" href="http://www.cnblogs.com/jintan/archive/2011/03/29/1998878.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/jintan/archive/2011/03/29/1998878.html"/><content type="html">&lt;table id="Table1" border="0" cellspacing="2" cellpadding="2" width="90%" align="center"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="clsFieldLabel" height="20" align="left"&gt;Introduction:&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="clsBodyText" height="20" align="left"&gt;&lt;p&gt;&lt;font face="Arial"&gt;Often working with content in the form of html, I have needed to manipulate the content intelligently. I accomplished this by using regular expressions to "parse" the html to find certain tags. This enabled me to look for certain tags with certain attributes, etc.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face="Arial"&gt;This works well enough, but some people aren't familiar with regular expression syntax and struggle to maintain and extend the code for manipulating the markup.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face="Arial"&gt;A much simpler and developer-friendly option is to reference the mshtml object. I will illustrate the use of this object with an over simplified example. I am going to mention regular expressions, but I'm not going to go into the syntax or even show any statements - it's a totally different subject altogether.&lt;/font&gt; &lt;br /&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;table id="Table1" border="0" cellspacing="2" cellpadding="2" width="90%" align="center"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="clsFieldLabel" height="17" align="left"&gt;Problem scenario:&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="clsBodyText" height="17" align="left"&gt;&lt;p&gt;&lt;font face="Arial"&gt;My pages in my website contains elements with formatting elements hard coded onto them, instead of having all the formatting set through a class reference to a stylesheet.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face="Arial"&gt;This means that I will have an element with it's bgcolor attribute set to "blue" and it's border attribute set to "1". For example:&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;&amp;lt;p bgcolor="blue" color="red" border="1"&amp;gt;bla di bla bla&amp;lt;/p&amp;gt;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;font face="Arial"&gt;&lt;font face="Arial"&gt;I want to set a class name attribute on all the elements, with a combination of these two attributes with the same values. Meaning any element having a bgcolor of "blue" and a border of "1". The following will qualify too:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;&amp;lt;td bgcolor=blue id="mytd" onclick="alert('clicked');" border="1"&amp;gt;Hello&amp;lt;/td&amp;gt;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;font face="Arial"&gt;&lt;font face="Arial"&gt;So how can I find all the instances of tags that have these two attributes with the correct values in the markup? A normal string operation will not suffice. So a regular expression solution is sufficient. But when the border and bgcolor sequence is switched it adds a whole new level of complexity to the regular expression, for example:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face="Arial"&gt;&lt;em&gt;&amp;lt;td border="1" id="mytd" onclick="alert('clicked');" bgcolor=blue&amp;gt;Hello&amp;lt;/td&amp;gt;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;font face="Arial"&gt;Now we can't assume that the bgcolor attribute will be found first and then the border attribute. And what about when we want to search on three attributes?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;/font&gt;&lt;br /&gt;&lt;font face="宋体"&gt;&amp;nbsp;&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="clsFieldLabel" align="left"&gt;Solution&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="clsBodyText" align="left"&gt;&lt;p&gt;&lt;font face="Arial"&gt;What we want to do is loop through the html elements in the markup and look for elements that satisfy our requirements, and we check this by accessing the attributes in a non-sequential, natural manner. If all the attributes are satisfied, then the tag qualifies for the update.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face="Arial"&gt;We need a way to let our method know what attributes to look for, their corresponding values and the new attribute key/value pairs to set ons this object.&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="clsLabelHeading" height="1" align="left"&gt;&lt;font class="clsFieldLabel" size="4" face="Arial"&gt;Code&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="clsBodyText" height="18" align="left"&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;font face="Arial"&gt;We have to add a reference to the mshtml object&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face="Arial"&gt;In the solution explorer, highlight the project to which you want to add the parsing functionality&lt;br /&gt;In the menu, click on Project -&amp;gt; Add reference&lt;br /&gt;In the dialog box that is shown, under the .Net tab - choose the Microsoft.mshtml assembly&lt;br /&gt;Click the select button and click on the OK button&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face="Arial"&gt;Now we can reference this assembly&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="clsFieldLabel" height="12" align="left"&gt;&lt;p class="PreSourceCode"&gt;&lt;font face="Arial"&gt;using mshtml;&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="clsFieldLabel" height="12" align="left"&gt;&lt;font class="clsBodyText" face="Arial"&gt;Our class will contain one method, this method will take 3 parameters.&lt;br /&gt;A string containing the markup to parse, an arraylist populated with key/value pairs that needs to be present on an object to qualify for the update and an arraylist populated with new key/value pairs to be set on the qualified objects.&lt;br /&gt;We also have a struct to aid us as a container for our attribute key/value pairs.&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="clsFieldLabel" height="12" align="left"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br/&gt;&lt;span class="kwrd"&gt;namespace&lt;/span&gt; MarkupOps&lt;br/&gt;    {&lt;br/&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; ServerParse&lt;br/&gt;        {&lt;br/&gt;            &lt;span class="rem"&gt;/// &lt;/span&gt;&lt;br/&gt;            &lt;span class="rem"&gt;/// Searches the markup for tags that has all the key/value pairs in the searchList arrayList&lt;/span&gt;&lt;br/&gt;            &lt;span class="rem"&gt;/// When it finds a tag it sets all the key/value pairs contained in the setList&lt;/span&gt;&lt;br/&gt;            &lt;span class="rem"&gt;/// &lt;/span&gt;&lt;br/&gt;            &lt;span class="rem"&gt;/// The markup to search ans replace in&lt;/span&gt;&lt;br/&gt;            &lt;span class="rem"&gt;/// An arraylist of key/value pair objects that a tag must have before qualifying for the &lt;/span&gt;&lt;br/&gt;            &lt;span class="rem"&gt;/// properties to be set&lt;/span&gt;&lt;br/&gt;            &lt;span class="rem"&gt;/// A list of attributes to set on the qualifying objects&lt;/span&gt;&lt;br/&gt;            &lt;span class="rem"&gt;/// &lt;/span&gt;&lt;br/&gt;            &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; UpdateAttributes(&lt;span class="kwrd"&gt;string&lt;/span&gt; inMarkup, ArrayList searchList, ArrayList setList)&lt;br/&gt;            {&lt;br/&gt;                &lt;span class="kwrd"&gt;if&lt;/span&gt; (matchList.Count &amp;gt; 0)&lt;br/&gt;                {&lt;br/&gt;                    &lt;span class="rem"&gt;//reads the html into an html document to enable parsing&lt;/span&gt;&lt;br/&gt;                    IHTMLDocument2 doc = &lt;span class="kwrd"&gt;new&lt;/span&gt; HTMLDocumentClass ();&lt;br/&gt;                    doc.write (&lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; [] {inMarkup});&lt;br/&gt;                    doc.close ();&lt;br/&gt;                    &lt;span class="rem"&gt;//loops through each element in the document to check if it qualifies for the attributes to be set&lt;/span&gt;&lt;br/&gt;                    &lt;span class="kwrd"&gt;foreach&lt;/span&gt;(IHTMLElement el &lt;span class="kwrd"&gt;in&lt;/span&gt; (IHTMLElementCollection)doc.body.all)&lt;br/&gt;                    {&lt;br/&gt;                        &lt;span class="rem"&gt;// check to see if all the desired attributes were found with the correct values&lt;/span&gt;&lt;br/&gt;                        &lt;span class="kwrd"&gt;bool&lt;/span&gt; qualify =&lt;span class="kwrd"&gt;true&lt;/span&gt;;&lt;br/&gt;                        &lt;span class="kwrd"&gt;foreach&lt;/span&gt;(KeyValue att &lt;span class="kwrd"&gt;in&lt;/span&gt; searchList)&lt;br/&gt;                        {&lt;br/&gt;                            &lt;span class="rem"&gt;//check for the first required attribute that's missing and break the loop&lt;/span&gt;&lt;br/&gt;                            &lt;span class="kwrd"&gt;if&lt;/span&gt;(el.getAttribute(att.key, 0).ToString().ToLower() != att.val.ToLower())&lt;br/&gt;                            {&lt;br/&gt;                                qualify=&lt;span class="kwrd"&gt;false&lt;/span&gt;;&lt;br/&gt;                                &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;br/&gt;                            }&lt;br/&gt;                        }&lt;br/&gt;                        &lt;span class="rem"&gt;// if all the required attributes matched - we can proceed in setting the values &lt;/span&gt;&lt;br/&gt;                        &lt;span class="kwrd"&gt;if&lt;/span&gt;(qualify)&lt;br/&gt;                        {&lt;br/&gt;                            &lt;span class="kwrd"&gt;foreach&lt;/span&gt;(KeyValue setAtt &lt;span class="kwrd"&gt;in&lt;/span&gt; setList)&lt;br/&gt;                            {&lt;br/&gt;                                &lt;span class="rem"&gt;//sets the value on the object, if the att already exists, it's overwritten &lt;/span&gt;&lt;br/&gt;                                el.setAttribute(setAtt.key, setAtt.val, 0);&lt;br/&gt;                            }&lt;br/&gt;                        }&lt;br/&gt;                    }&lt;br/&gt;                    &lt;span class="kwrd"&gt;return&lt;/span&gt; doc.body.outerHTML;&lt;br/&gt;                }&lt;br/&gt;                &lt;span class="kwrd"&gt;return&lt;/span&gt; inMarkup;&lt;br/&gt;             }&lt;br/&gt;&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;        &lt;span class="rem"&gt;//this just helps to contain the key values&lt;/span&gt;&lt;br/&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;struct&lt;/span&gt; KeyValue&lt;br/&gt;        {&lt;br/&gt;            &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; key;&lt;br/&gt;            &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; val;&lt;br/&gt;            &lt;span class="kwrd"&gt;public&lt;/span&gt; KeyValue(&lt;span class="kwrd"&gt;string&lt;/span&gt; key, &lt;span class="kwrd"&gt;string&lt;/span&gt; val)&lt;br/&gt;            {&lt;br/&gt;                &lt;span class="kwrd"&gt;this&lt;/span&gt;.key=key;&lt;br/&gt;                &lt;span class="kwrd"&gt;this&lt;/span&gt;.val=val;&lt;br/&gt;            }&lt;br/&gt;        }&lt;br/&gt;    }&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="clsFieldLabel" height="12" align="left"&gt;&lt;font class="clsFieldLabel" size="4" face="Arial"&gt;Using the code&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="clsFieldLabel" height="12" align="left"&gt;&lt;font face="Arial"&gt;&lt;strong class="clsBodyText"&gt;Our example html text&lt;/strong&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="clsFieldLabel" height="12" align="left"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;table&lt;/span&gt; &lt;span class="attr"&gt;bgcolor&lt;/span&gt;&lt;span class="kwrd"&gt;="red"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;tr&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt; &lt;span class="attr"&gt;bgcolor&lt;/span&gt;&lt;span class="kwrd"&gt;="yellow"&lt;/span&gt; &lt;span class="attr"&gt;border&lt;/span&gt;&lt;span class="kwrd"&gt;="2"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Name&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;="qualify1"&lt;/span&gt; &lt;span class="attr"&gt;border&lt;/span&gt;&lt;span class="kwrd"&gt;="1"&lt;/span&gt; &lt;span class="attr"&gt;bgcolor&lt;/span&gt;=&lt;span class="attr"&gt;blue&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;tr&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;tr&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;p&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;="qualify2"&lt;/span&gt; &lt;span class="attr"&gt;bgcolor&lt;/span&gt;&lt;span class="kwrd"&gt;="blue"&lt;/span&gt; &lt;span class="attr"&gt;border&lt;/span&gt;&lt;span class="kwrd"&gt;="1"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Surname&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;p&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;tr&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;tr&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;address&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;tr&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;table&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="clsBodyText" height="12" align="left"&gt;&lt;p&gt;&lt;font face="Arial"&gt;We want to parse this html, look for tags (of any kind) that has the following attributes:&lt;/font&gt;&lt;/p&gt;&lt;font face="Arial"&gt;&lt;/font&gt;&lt;font face="Arial"&gt;&lt;ol&gt;&lt;li&gt;bgcolor=blue&lt;/li&gt;&lt;li&gt;border=1&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;br /&gt;When a tag is found which qualifies, the className (translates to class in html, but the DOM property is className) property of the element will be set to "blueBorder".&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="clsFieldLabel" height="12" align="left"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br/&gt;&lt;span class="rem"&gt;//populates an arraylist with the keyvalue pairs which will qualify the tags&lt;/span&gt;&lt;br/&gt;ArrayList searchList = &lt;span class="kwrd"&gt;new&lt;/span&gt; ArrayList();&lt;br/&gt;KeyValue kv = &lt;span class="kwrd"&gt;new&lt;/span&gt; KeyValue(&lt;span class="str"&gt;"bgcolor"&lt;/span&gt;, &lt;span class="str"&gt;"blue"&lt;/span&gt;);&lt;br/&gt;searchList.Add(kv);&lt;br/&gt;kv = &lt;span class="kwrd"&gt;new&lt;/span&gt; KeyValue(&lt;span class="str"&gt;"border"&lt;/span&gt;, &lt;span class="str"&gt;"1"&lt;/span&gt;);&lt;br/&gt;searchList.Add(kv);&lt;br/&gt;&lt;br/&gt;&lt;span class="rem"&gt;//populates an arraylist with the keyvalue pairs which will be set on any qualified tags&lt;/span&gt;&lt;br/&gt;ArrayList setList = &lt;span class="kwrd"&gt;new&lt;/span&gt; ArrayList();&lt;br/&gt;kv = &lt;span class="kwrd"&gt;new&lt;/span&gt; KeyValue(&lt;span class="str"&gt;"className"&lt;/span&gt;, &lt;span class="str"&gt;"blueBorder"&lt;/span&gt;);&lt;br/&gt;setList.Add(kv);&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;span class="rem"&gt;// assume the markupContent variable contains the example html of above&lt;/span&gt;&lt;br/&gt;&lt;span class="rem"&gt;//we pass the variables into the method in order to get the parsed and updated markup back&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;markupContent = ServerParse.UpdateAttributes(markupContent , searchList, setList);&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="clsBodyText" height="15" align="left"&gt;The resulting text&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="clsFieldLabel" height="12" align="left"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br/&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;table&lt;/span&gt; &lt;span class="attr"&gt;bgcolor&lt;/span&gt;&lt;span class="kwrd"&gt;="red"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;tr&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt; &lt;span class="attr"&gt;bgcolor&lt;/span&gt;&lt;span class="kwrd"&gt;="yellow"&lt;/span&gt; &lt;span class="attr"&gt;border&lt;/span&gt;&lt;span class="kwrd"&gt;="2"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Name&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;="qualify1"&lt;/span&gt; &lt;span class="attr"&gt;border&lt;/span&gt;&lt;span class="kwrd"&gt;="1"&lt;/span&gt; &lt;span class="attr"&gt;class&lt;/span&gt;&lt;span class="kwrd"&gt;="blueBorder"&lt;/span&gt; &lt;span class="attr"&gt;bgcolor&lt;/span&gt;=&lt;span class="attr"&gt;blue&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;tr&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;tr&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;p&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;="qualify2"&lt;/span&gt; &lt;span class="attr"&gt;class&lt;/span&gt;&lt;span class="kwrd"&gt;="blueBorder"&lt;/span&gt; &lt;span class="attr"&gt;bgcolor&lt;/span&gt;&lt;span class="kwrd"&gt;="blue"&lt;/span&gt; &lt;span class="attr"&gt;border&lt;/span&gt;&lt;span class="kwrd"&gt;="1"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Surname&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;p&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;tr&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;tr&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;address&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;tr&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;table&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="clsFieldLabel" height="15" align="left"&gt;Conclusion&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="clsBodyText" height="12" align="left"&gt;&lt;p&gt;&lt;font face="Arial"&gt;You can use this anywhere where you want to manipulate the markup based on a search. &lt;/font&gt;&lt;font face="Arial"&gt;&lt;br /&gt;And it's a much simpler process than using regular expressions.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;It can also be used to perform functions on markup in a windows application.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;img src="http://www.cnblogs.com/jintan/aggbug/1998878.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/jintan/archive/2011/03/29/1998878.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/jintan/archive/2011/03/23/1993286.html</id><title type="text">Serialize and Deserialize RDL</title><summary type="text">If you have a ReportViewer class generated from the XSD report definition file using:xsd.exe /c /namespace:Rdl ReportDefinition.xsdYou can serialize and deserialize the class to/from RDLC XML:xmldoc contains the XML RDLC code and is an XmlDocument.Deserialization, from XML to ClassRdl.Report report </summary><published>2011-03-23T15:30:00Z</published><updated>2011-03-23T15:30:00Z</updated><author><name>代码乱了</name><uri>http://www.cnblogs.com/jintan/</uri></author><link rel="alternate" href="http://www.cnblogs.com/jintan/archive/2011/03/23/1993286.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/jintan/archive/2011/03/23/1993286.html"/><content type="html">&lt;div&gt;&lt;span style="color: #333333; font-family: Georgia, serif; font-size: 13px; line-height: normal; "&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://devcoma.blogspot.com/2009/10/serialize-and-deserialize-rdl-class.html" style="color: #cc6600; text-decoration: none; display: block; font-weight: normal; "&gt;&lt;br /&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div&gt;&lt;/div&gt;&lt;div entry-content"="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px; line-height: 1.6em; "&gt;If you have a ReportViewer class generated from the XSD report definition file using:&lt;br /&gt;xsd.exe /c /namespace:Rdl ReportDefinition.xsd&lt;br /&gt;&lt;br /&gt;You can serialize and deserialize the class to/from RDLC XML:&lt;br /&gt;&lt;br /&gt;xmldoc contains the XML RDLC code and is an XmlDocument.&lt;br /&gt;&lt;br /&gt;Deserialization, from XML to Class&lt;br /&gt;&lt;br /&gt;Rdl.Report report = new Rdl.Report();&lt;br /&gt;XmlSerializer serializer = new XmlSerializer(typeof(Report));&lt;br /&gt;XmlNodeReader xmlr = new XmlNodeReader(xmldoc);&lt;br /&gt;report = (Rdl.Report)serializer.Deserialize(xmlr);&lt;br /&gt;&lt;br /&gt;Now you can change the report elements using the objects and collections inside the&lt;br /&gt;Rdl.Report class.&lt;br /&gt;&lt;br /&gt;And Serialization, from Class to XML:&lt;br /&gt;&lt;br /&gt;XmlDocument xmldoc = new XmlDocument();&lt;br /&gt;StringBuilder sb = new StringBuilder();&lt;br /&gt;MyStringWriterWithEncoding sw = new MyStringWriterWithEncoding(sb, System.Text.Encoding.UTF8);&lt;br /&gt;serializer.Serialize(sw, report);&lt;br /&gt;string sxml = sb.ToString();&lt;br /&gt;xmldoc.LoadXml(sxml);&lt;br /&gt;&lt;br /&gt;Here is a link to the ReportDefinition.cs class:&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/jintan/aggbug/1993286.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/jintan/archive/2011/03/23/1993286.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/jintan/archive/2011/01/27/1946391.html</id><title type="text">Winform Field interface</title><summary type="text">using System;using System.Collections.Generic;using System.Linq;using System.Web;namespace Bronze.DEPSP.Complaint{ public interface IFormField { /// &lt;summary&gt; /// 表单字段名 /// &lt;/summary&gt; string FieldName { get; set; } /// &lt;summary&gt; /// 控件值 /// &lt;/summary&gt; object FieldValue { get;</summary><published>2011-01-27T09:44:00Z</published><updated>2011-01-27T09:44:00Z</updated><author><name>代码乱了</name><uri>http://www.cnblogs.com/jintan/</uri></author><link rel="alternate" href="http://www.cnblogs.com/jintan/archive/2011/01/27/1946391.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/jintan/archive/2011/01/27/1946391.html"/><content type="html">&lt;div&gt;&lt;div&gt;using System;&lt;/div&gt;&lt;div&gt;using System.Collections.Generic;&lt;/div&gt;&lt;div&gt;using System.Linq;&lt;/div&gt;&lt;div&gt;using System.Web;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;namespace Bronze.DEPSP.Complaint&lt;/div&gt;&lt;div&gt;{&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;public interface IFormField&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/// &amp;lt;summary&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/// 表单字段名&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/// &amp;lt;/summary&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;string FieldName { get; set; }&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/// &amp;lt;summary&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/// 控件值&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/// &amp;lt;/summary&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;object FieldValue { get; set; }&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;string ValuePropertyName { get; set; }&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/// &amp;lt;summary&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/// 是否允许为空&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/// &amp;lt;/summary&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;bool AllowBlank { get; set; }&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;string EmptyText { get; set; }&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;string VaildExpression&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;get;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;set;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/// &amp;lt;summary&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/// 验证为空时的提示信息&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/// &amp;lt;/summary&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;string EmptyMsg { get; set; }&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/// &amp;lt;summary&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/// 控件默认值&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/// &amp;lt;/summary&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;string DefaultValue { get; set; }&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/// &amp;lt;summary&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/// 判断是否为空&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/// &amp;lt;/summary&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;bool InputEmpty();&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/jintan/aggbug/1946391.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/jintan/archive/2011/01/27/1946391.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/jintan/archive/2010/10/27/1862114.html</id><title type="text">转换前台javascript传递过来的时间字符串到.net的DateTime</title><summary type="text">javascript: var date=new Date().toString();得到的结果类似于:Wed Oct 27 2010 08:53:04 GMT+0800 如何在C#中把这个字符串转换为DateTime类型呢？[代码]</summary><published>2010-10-27T00:57:00Z</published><updated>2010-10-27T00:57:00Z</updated><author><name>代码乱了</name><uri>http://www.cnblogs.com/jintan/</uri></author><link rel="alternate" href="http://www.cnblogs.com/jintan/archive/2010/10/27/1862114.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/jintan/archive/2010/10/27/1862114.html"/><content type="html">&lt;p&gt;javascript:&amp;nbsp; var date=new Date().toString();&lt;br /&gt;&lt;/p&gt;&lt;p&gt;得到的结果类似于:&lt;span style="color: red;" role="presentation" objectbox-string=""&gt;Wed Oct 27 2010 08:53:04 GMT+0800&lt;/span&gt; &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;如何在C#中把这个字符串转换为DateTime类型呢？&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&lt;!--&lt;br/ /&gt;&lt;br/ /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/ /&gt;http://www.CodeHighlighter.com/&lt;br/ /&gt;&lt;br/ /&gt;--&gt;&lt;span style="color: #000000;"&gt;DateTime.ParseExact(&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;Wed Oct&amp;nbsp;27 16:23:44&amp;nbsp;UTC+0800&amp;nbsp;2010&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;ddd&amp;nbsp;MMM&amp;nbsp;dd&amp;nbsp;HH:mm:ss&amp;nbsp;UTCzzzzz&amp;nbsp;yyyy&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;,CultureInfo.InvariantCulture)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/jintan/aggbug/1862114.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/jintan/archive/2010/10/27/1862114.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
