<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_启明星会议室预订系统与企业内网文档库</title><subtitle type="text">启明星博客，提供会议室预定系统,CMS系统，helpdesk和请假管理系统</subtitle><id>http://feed.cnblogs.com/blog/u/11290/rss</id><updated>2012-02-01T00:39:49Z</updated><author><name>天天</name><uri>http://www.cnblogs.com/mqingqing123/</uri></author><generator>CNBlogs BlogServer</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/mqingqing123/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/11290/rss"/><entry><id>http://www.cnblogs.com/mqingqing123/archive/2012/01/17/2324752.html</id><title type="text">抓取网页并提取其中的文本（参考网上部分代码）</title><summary type="text">抓取网页并提取其中的文本（参考网上部分代码）</summary><published>2012-01-17T07:57:00Z</published><updated>2012-01-17T07:57:00Z</updated><author><name>天天</name><uri>http://www.cnblogs.com/mqingqing123/</uri></author><link rel="alternate" href="http://www.cnblogs.com/mqingqing123/archive/2012/01/17/2324752.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/mqingqing123/archive/2012/01/17/2324752.html"/><content type="html">&lt;p&gt;using System;&lt;br /&gt;using System.Collections.Generic;&lt;br /&gt;using System.Linq;&lt;br /&gt;using System.Web;&lt;br /&gt;using System.Web.UI;&lt;br /&gt;using System.Web.UI.WebControls;&lt;br /&gt;using System.Net;&lt;br /&gt;using System.Text;&lt;br /&gt;using System.IO;&lt;br /&gt;public partial class AnalyHtml : System.Web.UI.Page&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected void Page_Load(object sender, EventArgs e)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;string url = "&lt;a href="http://www.lashou.com/wikilashou_city.php?wker=0&amp;amp;cityid=2421&amp;amp;width=220&amp;amp;height=100"&gt;http://www.lashou.com/wikilashou_city.php?wker=0&amp;amp;cityid=2421&amp;amp;width=220&amp;amp;height=100&lt;/a&gt;";&lt;br /&gt;&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; &lt;br /&gt;&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; WebProxy myProxy = new WebProxy("1.1.1.8",8080);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; myProxy.Credentials = new NetworkCredential("username", "password");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; myProxy.BypassProxyOnLocal = true;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WebRequest.DefaultWebProxy = myProxy;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WebRequest myWebRequest = WebRequest.Create(url);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; myWebRequest.Timeout = 60000;&lt;/p&gt;&#xD;
&lt;p&gt;myWebRequest.Method = "GET";&lt;/p&gt;&#xD;
&lt;p&gt;////////////&lt;/p&gt;&#xD;
&lt;p&gt;StreamReader reader = new StreamReader(myWebRequest.GetResponse().GetResponseStream(), Encoding.UTF8);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string data = reader.ReadToEnd();&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; HtmlToText html = new HtmlToText();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string result= html.Convert(data);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Response.Write(result);&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;class HtmlToText&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Static data tables&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected static Dictionary&amp;lt;string, string&amp;gt; _tags;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected static HashSet&amp;lt;string&amp;gt; _ignoreTags;&lt;/p&gt;&#xD;
&lt;p&gt;// Instance variables&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected TextBuilder _text;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected string _html;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected int _pos;&lt;/p&gt;&#xD;
&lt;p&gt;// Static constructor (one time only)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; static HtmlToText()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _tags = new Dictionary&amp;lt;string, string&amp;gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _tags.Add("address", "\n");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _tags.Add("blockquote", "\n");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _tags.Add("div", "\n");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _tags.Add("dl", "\n");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _tags.Add("fieldset", "\n");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _tags.Add("form", "\n");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _tags.Add("h1", "\n");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _tags.Add("/h1", "\n");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _tags.Add("h2", "\n");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _tags.Add("/h2", "\n");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _tags.Add("h3", "\n");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _tags.Add("/h3", "\n");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _tags.Add("h4", "\n");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _tags.Add("/h4", "\n");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _tags.Add("h5", "\n");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _tags.Add("/h5", "\n");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _tags.Add("h6", "\n");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _tags.Add("/h6", "\n");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _tags.Add("p", "\n");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _tags.Add("/p", "\n");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _tags.Add("table", "\n");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _tags.Add("/table", "\n");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _tags.Add("ul", "\n");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _tags.Add("/ul", "\n");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _tags.Add("ol", "\n");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _tags.Add("/ol", "\n");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _tags.Add("/li", "\n");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _tags.Add("br", "\n");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _tags.Add("/td", "\t");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _tags.Add("/tr", "\n");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _tags.Add("/pre", "\n");&lt;/p&gt;&#xD;
&lt;p&gt;_ignoreTags = new HashSet&amp;lt;string&amp;gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _ignoreTags.Add("script");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _ignoreTags.Add("noscript");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _ignoreTags.Add("style");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _ignoreTags.Add("object");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&#xD;
&lt;p&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// Converts the given HTML to plain text and returns the result.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;/summary&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;param name="html"&amp;gt;HTML to be converted&amp;lt;/param&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;returns&amp;gt;Resulting plain text&amp;lt;/returns&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public string Convert(string html)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Initialize state variables&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _text = new TextBuilder();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _html = html;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _pos = 0;&lt;/p&gt;&#xD;
&lt;p&gt;// Process input&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (!EndOfText)&lt;br /&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (Peek() == '&amp;lt;')&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // HTML tag&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bool selfClosing;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string tag = ParseTag(out selfClosing);&lt;/p&gt;&#xD;
&lt;p&gt;// Handle special tag cases&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (tag == "body")&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Discard content before &amp;lt;body&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _text.Clear();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if (tag == "/body")&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Discard content after &amp;lt;/body&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _pos = _html.Length;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if (tag == "pre")&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Enter preformatted mode&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _text.Preformatted = true;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; EatWhitespaceToNextLine();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if (tag == "/pre")&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Exit preformatted mode&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _text.Preformatted = false;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&#xD;
&lt;p&gt;string value;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (_tags.TryGetValue(tag, out value))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _text.Write(value);&lt;/p&gt;&#xD;
&lt;p&gt;if (_ignoreTags.Contains(tag))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; EatInnerContent(tag);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if (Char.IsWhiteSpace(Peek()))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Whitespace (treat all as space)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _text.Write(_text.Preformatted ? Peek() : ' ');&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MoveAhead();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Other text&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _text.Write(Peek());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MoveAhead();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Return result&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return HttpUtility.HtmlDecode(_text.ToString());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&#xD;
&lt;p&gt;// Eats all characters that are part of the current tag&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // and returns information about that tag&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected string ParseTag(out bool selfClosing)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string tag = String.Empty;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; selfClosing = false;&lt;/p&gt;&#xD;
&lt;p&gt;if (Peek() == '&amp;lt;')&lt;br /&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; MoveAhead();&lt;/p&gt;&#xD;
&lt;p&gt;// Parse tag name&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; EatWhitespace();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int start = _pos;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (Peek() == '/')&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MoveAhead();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (!EndOfText &amp;amp;&amp;amp; !Char.IsWhiteSpace(Peek()) &amp;amp;&amp;amp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Peek() != '/' &amp;amp;&amp;amp; Peek() != '&amp;gt;')&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MoveAhead();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tag = _html.Substring(start, _pos - start).ToLower();&lt;/p&gt;&#xD;
&lt;p&gt;// Parse rest of tag&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (!EndOfText &amp;amp;&amp;amp; Peek() != '&amp;gt;')&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (Peek() == '"' || Peek() == '\'')&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; EatQuotedValue();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (Peek() == '/')&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; selfClosing = true;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MoveAhead();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; MoveAhead();&lt;br /&gt;&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; return tag;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&#xD;
&lt;p&gt;// Consumes inner content from the current tag&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected void EatInnerContent(string tag)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string endTag = "/" + tag;&lt;/p&gt;&#xD;
&lt;p&gt;while (!EndOfText)&lt;br /&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (Peek() == '&amp;lt;')&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Consume a tag&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bool selfClosing;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (ParseTag(out selfClosing) == endTag)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Use recursion to consume nested tags&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (!selfClosing &amp;amp;&amp;amp; !tag.StartsWith("/"))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; EatInnerContent(tag);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; else MoveAhead();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&#xD;
&lt;p&gt;// Returns true if the current position is at the end of&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // the string&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected bool EndOfText&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; get { return (_pos &amp;gt;= _html.Length); }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&#xD;
&lt;p&gt;// Safely returns the character at the current position&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected char Peek()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return (_pos &amp;lt; _html.Length) ? _html[_pos] : (char)0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&#xD;
&lt;p&gt;// Safely advances to current position to the next character&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected void MoveAhead()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _pos = Math.Min(_pos + 1, _html.Length);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&#xD;
&lt;p&gt;// Moves the current position to the next non-whitespace&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // character.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected void EatWhitespace()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (Char.IsWhiteSpace(Peek()))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MoveAhead();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&#xD;
&lt;p&gt;// Moves the current position to the next non-whitespace&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // character or the start of the next line, whichever&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // comes first&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected void EatWhitespaceToNextLine()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (Char.IsWhiteSpace(Peek()))&lt;br /&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; char c = Peek();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MoveAhead();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (c == '\n')&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&#xD;
&lt;p&gt;// Moves the current position past a quoted value&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected void EatQuotedValue()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; char c = Peek();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (c == '"' || c == '\'')&lt;br /&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Opening quote&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MoveAhead();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Find end of value&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int start = _pos;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _pos = _html.IndexOfAny(new char[] { c, '\r', '\n' }, _pos);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (_pos &amp;lt; 0)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _pos = _html.Length;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MoveAhead();&amp;nbsp;&amp;nbsp;&amp;nbsp; // Closing quote&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&#xD;
&lt;p&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// A StringBuilder class that helps eliminate excess whitespace.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;/summary&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected class TextBuilder&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private StringBuilder _text;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private StringBuilder _currLine;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private int _emptyLines;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private bool _preformatted;&lt;/p&gt;&#xD;
&lt;p&gt;// Construction&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public TextBuilder()&lt;br /&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; _text = new StringBuilder();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _currLine = new StringBuilder();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _emptyLines = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _preformatted = false;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&#xD;
&lt;p&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// Normally, extra whitespace characters are discarded.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// If this property is set to true, they are passed&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// through unchanged.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;/summary&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public bool Preformatted&lt;br /&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; get&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return _preformatted;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; set&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (value)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Clear line buffer if changing to&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // preformatted mode&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (_currLine.Length &amp;gt; 0)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FlushCurrLine();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _emptyLines = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _preformatted = value;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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; }&lt;/p&gt;&#xD;
&lt;p&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// Clears all current text.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;/summary&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void Clear()&lt;br /&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; _text.Length = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _currLine.Length = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _emptyLines = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&#xD;
&lt;p&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// Writes the given string to the output buffer.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;/summary&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;param name="s"&amp;gt;&amp;lt;/param&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void Write(string s)&lt;br /&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach (char c in s)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write(c);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&#xD;
&lt;p&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// Writes the given character to the output buffer.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;/summary&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;param name="c"&amp;gt;Character to write&amp;lt;/param&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void Write(char c)&lt;br /&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (_preformatted)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Write preformatted character&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _text.Append(c);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (c == '\r')&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Ignore carriage returns. We'll process&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // '\n' if it comes next&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if (c == '\n')&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Flush current line&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FlushCurrLine();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if (Char.IsWhiteSpace(c))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Write single space character&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int len = _currLine.Length;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (len == 0 || !Char.IsWhiteSpace(_currLine[len - 1]))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _currLine.Append(' ');&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Add character to current line&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _currLine.Append(c);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&#xD;
&lt;p&gt;// Appends the current line to output buffer&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected void FlushCurrLine()&lt;br /&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Get current line&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string line = _currLine.ToString().Trim();&lt;/p&gt;&#xD;
&lt;p&gt;// Determine if line contains non-space characters&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string tmp = line.Replace(" ", String.Empty);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (tmp.Length == 0)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // An empty line&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _emptyLines++;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (_emptyLines &amp;lt; 2 &amp;amp;&amp;amp; _text.Length &amp;gt; 0)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _text.AppendLine(line);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // A non-empty line&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _emptyLines = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _text.AppendLine(line);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&#xD;
&lt;p&gt;// Reset current line&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _currLine.Length = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&#xD;
&lt;p&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// Returns the current output as a string.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;/summary&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public override string ToString()&lt;br /&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (_currLine.Length &amp;gt; 0)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FlushCurrLine();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return _text.ToString();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/mqingqing123/aggbug/2324752.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/mqingqing123/archive/2012/01/17/2324752.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/mqingqing123/archive/2012/01/07/2315499.html</id><title type="text">修改SQL数据库dbo所有者</title><summary type="text">2012-01-07 09:03 by 天天, 0 visits, 收藏, 编辑批量修改： 程序代码EXEC sp_MSforeachtable &amp;#39;exec sp_changeobjectowner &amp;#39;&amp;#39;?&amp;#39;&amp;#39;,&amp;#39;&amp;#39;dbo&amp;#39;&amp;#39; &amp;#39;单个修改： 程序代码exec sp_changeobjectowner &amp;#39;要改的表名&amp;#39;,&amp;#39;dbo&amp;#39;手动修改： 直接点击该表-&amp;gt;设计-&amp;gt;属性-&amp;gt;更改上面的所有者。该方法针对于表少的情况下。--如果一个数据库中(表和存储过程)有多个用户名，而要</summary><published>2012-01-07T01:03:00Z</published><updated>2012-01-07T01:03:00Z</updated><author><name>天天</name><uri>http://www.cnblogs.com/mqingqing123/</uri></author><link rel="alternate" href="http://www.cnblogs.com/mqingqing123/archive/2012/01/07/2315499.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/mqingqing123/archive/2012/01/07/2315499.html"/><content type="html">&lt;p&gt;2012-01-07 09:03&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; by&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 天天,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; visits,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a onclick="PutInWz();return false;" href="#"&gt;收藏&lt;/a&gt;,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a id="ctl01_lnkEdit" href="http://www.cnblogs.com/mqingqing123/admin/EditArticles.aspx?postid=2315497"&gt;编辑&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div id="cnblogs_post_body"&gt;&#xD;
&lt;p&gt;批量修改： 程序代码EXEC sp_MSforeachtable 'exec sp_changeobjectowner ''?'',''dbo'' '&lt;/p&gt;&#xD;
&lt;p&gt;单个修改： 程序代码exec sp_changeobjectowner '要改的表名','dbo'&lt;/p&gt;&#xD;
&lt;p&gt;手动修改： 直接点击该表-&amp;gt;设计-&amp;gt;属性-&amp;gt;更改上面的所有者。该方法针对于表少的情况下。&lt;/p&gt;&#xD;
&lt;p&gt;--如果一个数据库中(表和存储过程)有多个用户名，而要把它所有都改成dbo 就可以用如下的语句 Select 'sp_changeobjectowner ''' + User_Name(Uid) + '.' + name + ''',''dbo'' ' From sysobjects Where Uid Not in (User_ID('dbo')) And Type In ('U','P') --然后把查询出来的语句拷贝出来，直接运行就表和存储过程的对象都会改过来，但SQL SERVER要先退出来，再进去，才能看到更改后的结果&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;更改SQL Server表所有者的操作方法&lt;/p&gt;&#xD;
&lt;p&gt;笔者用过两种方法：&lt;/p&gt;&#xD;
&lt;p&gt;1） 通过修改当前数据库的对象表：sysobjects。&lt;/p&gt;&#xD;
&lt;p&gt;sysobjects存储的是当前数据库中的表的基本信息，其中由一个字段：uid，记录的是表所有者的id号。如：uid为&amp;lsquo;1&amp;rsquo;，一般表示所有者为dbo（一般是sa）。可以为表所有者更改为你所希望的表所有者的id。&lt;/p&gt;&#xD;
&lt;p&gt;需要注意的是，直接在sysobjects表中对数据进行的更新操作需要有权限允许。不然会更新不成功&lt;/p&gt;&#xD;
&lt;p&gt;2） 另外一种方式是通过sql脚本来完成的。&lt;/p&gt;&#xD;
&lt;p&gt;例如：exec sp_changeobjectowner 'cqadmin.authors', 111 将表'cqadmin.authors'的所有者改为111.&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&lt;img src="http://www.cnblogs.com/mqingqing123/aggbug/2315499.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/mqingqing123/archive/2012/01/07/2315499.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/mqingqing123/archive/2011/12/19/2293296.html</id><title type="text">启明星会议室预定系统V5.0.0.0版本说明</title><summary type="text">2011年12月19日，我们推出了启明星会议室预定系统V5.0.0.0版本，此版本与以往版本最大的差距是，系统使用了.NET4.0 Framework。在过去，Windows XP+ASP.NET3.5+MSSQL2005+IIS5.1+IE8是常用的主流环境。而由于我们最近将系统进行了升级，因此新版的开发环境是：Windows 7+ASP.NET4.0+MSSQL2008+IIS7+IE9。当然，为了考虑到用户的方面性，在数据库方面新版仍然支持MSSQL2005。 在V5.0.0.0版本里，另外一个改进是增减了会议室的实时显示，您可以在后台，会议室调用里找到会议室调用页面。如下，打开后...</summary><published>2011-12-19T05:52:00Z</published><updated>2011-12-19T05:52:00Z</updated><author><name>天天</name><uri>http://www.cnblogs.com/mqingqing123/</uri></author><link rel="alternate" href="http://www.cnblogs.com/mqingqing123/archive/2011/12/19/2293296.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/mqingqing123/archive/2011/12/19/2293296.html"/><content type="html">&lt;p&gt;2011年12月19日，我们推出了启明星会议室预定系统V5.0.0.0版本，此版本与以往版本最大的差距是，系统使用了.NET4.0 Framework。&lt;/p&gt;&#xD;
&lt;p&gt;在过去，Windows XP+ASP.NET3.5+MSSQL2005+IIS5.1+IE8是常用的主流环境。而由于我们最近将系统进行了升级，因此新版的开发环境是：&lt;/p&gt;&#xD;
&lt;p&gt;Windows 7+ASP.NET4.0+MSSQL2008+IIS7+IE9。当然，为了考虑到用户的方面性，在数据库方面新版仍然支持MSSQL2005。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;在V5.0.0.0版本里，另外一个改进是增减了会议室的实时显示，您可以在后台，会议室调用里找到会议室调用页面。如下，打开后，系统就会实时显示会议室的&lt;/p&gt;&#xD;
&lt;p&gt;使用情况，配合本质提供的客户端程序(exe程序或者apk程序)，就可以让这个系统运行在客户端，例如视频会议室门户的显示屏，然后实时显示会议室使用情况&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2011/7841/2011121913491472.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/mqingqing123/aggbug/2293296.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/mqingqing123/archive/2011/12/19/2293296.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/mqingqing123/archive/2011/11/30/2268544.html</id><title type="text">iphone&amp;amp; android 开发指南 http://mobile.tutsplus.com</title><summary type="text">非常好的教程iphone&amp;amp; android 开发指南http://mobile.tutsplus.com/category/tutorials/iphone/http://mobile.tutsplus.com/tutorials/mobile-web-apps/jquery_android/</summary><published>2011-11-30T00:51:00Z</published><updated>2011-11-30T00:51:00Z</updated><author><name>天天</name><uri>http://www.cnblogs.com/mqingqing123/</uri></author><link rel="alternate" href="http://www.cnblogs.com/mqingqing123/archive/2011/11/30/2268544.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/mqingqing123/archive/2011/11/30/2268544.html"/><content type="html">&lt;p&gt;非常好的教程&lt;/p&gt;&#xD;
&lt;p&gt;iphone&amp;amp; android 开发指南&lt;/p&gt;&#xD;
&lt;p&gt;http://mobile.tutsplus.com/category/tutorials/iphone/&lt;/p&gt;&#xD;
&lt;p&gt;http://mobile.tutsplus.com/tutorials/mobile-web-apps/jquery_android/&lt;/p&gt;&lt;img src="http://www.cnblogs.com/mqingqing123/aggbug/2268544.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/mqingqing123/archive/2011/11/30/2268544.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/mqingqing123/archive/2011/11/22/2258446.html</id><title type="text">在winform程序里实现最小化隐藏到windows右下角</title><summary type="text">先放notifyIcon和contextmenustrip控件，并设置对于关系然后1.关闭事件里，阻止之间关闭按钮（为了使得用户单机右下角的退出时，能够退出，所以必须使用CloseReason属性） private void Form1_FormClosing(object sender, FormClosingEventArgs e) { if (e.CloseReason == CloseReason.ApplicationExitCall) { Application.Exit(); } else { e.Cancel = true; this.WindowState = FormWin</summary><published>2011-11-22T02:52:00Z</published><updated>2011-11-22T02:52:00Z</updated><author><name>天天</name><uri>http://www.cnblogs.com/mqingqing123/</uri></author><link rel="alternate" href="http://www.cnblogs.com/mqingqing123/archive/2011/11/22/2258446.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/mqingqing123/archive/2011/11/22/2258446.html"/><content type="html">&lt;p&gt;先放notifyIcon和contextmenustrip控件，并设置对于关系&lt;/p&gt;&#xD;
&lt;p&gt;然后&lt;/p&gt;&#xD;
&lt;p&gt;1.关闭事件里，阻止之间关闭按钮（为了使得用户单机右下角的退出时，能够退出，所以必须使用CloseReason属性）&lt;br /&gt;&amp;nbsp; private void Form1_FormClosing(object sender, FormClosingEventArgs e)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;&#xD;
&lt;p&gt;if (e.CloseReason == CloseReason.ApplicationExitCall)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Application.Exit();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; e.Cancel = true;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.WindowState = FormWindowState.Minimized;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.Hide();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.notifyIcon1.Visible = true;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;2.双击icon还原&lt;br /&gt;&amp;nbsp; private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e)&lt;br /&gt;&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; notifyIcon1.Visible = true;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.Show();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.Activate();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.WindowState = FormWindowState.Normal;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&#xD;
&lt;p&gt;3.右下角单机退出时，运行退出&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private void Exit_Click(object sender, EventArgs e)&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; Application.Exit(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&lt;img src="http://www.cnblogs.com/mqingqing123/aggbug/2258446.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/mqingqing123/archive/2011/11/22/2258446.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/mqingqing123/archive/2011/10/21/2220539.html</id><title type="text">获取客户端经纬度坐标</title><summary type="text">在HTML5里，W3C支持 getCurrentPosition 方法，目前IE9，Firefox，Choreme等都支持唯一遗憾的是IE6-IE8都不支持，而IE9只能够在windows7下运行，所有windows XP用户只能够使用firefox和google浏览器来使用此功能。核心代码如下 function GetLoc() { navigator.geolocation.getCurrentPosition(getPositionSuccess, getPositionError, { timeout: 20000 }); } function getPositionSuccess(.</summary><published>2011-10-21T09:26:00Z</published><updated>2011-10-21T09:26:00Z</updated><author><name>天天</name><uri>http://www.cnblogs.com/mqingqing123/</uri></author><link rel="alternate" href="http://www.cnblogs.com/mqingqing123/archive/2011/10/21/2220539.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/mqingqing123/archive/2011/10/21/2220539.html"/><content type="html">&lt;p&gt;在HTML5里，W3C支持 getCurrentPosition 方法，目前IE9，Firefox，Choreme等都支持&lt;/p&gt;&#xD;
&lt;p&gt;唯一遗憾的是IE6-IE8都不支持，而IE9只能够在windows7下运行，所有windows XP&lt;/p&gt;&#xD;
&lt;p&gt;用户只能够使用firefox和google浏览器来使用此功能。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;核心代码如下&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;function GetLoc()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; navigator.geolocation.getCurrentPosition(getPositionSuccess, getPositionError, { timeout: 20000 });&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; function getPositionSuccess(position){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var lat = position.coords.latitude;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var lng = position.coords.longitude;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; alert(lat+" "+lng);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; function getPositionError(error) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; alert(error.code);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp; }&lt;/p&gt;&#xD;
&lt;p&gt;lat和lng是经纬度坐标，获此此坐标后，就可以使用&amp;ldquo;位置交友了&amp;rdquo;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/mqingqing123/aggbug/2220539.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/mqingqing123/archive/2011/10/21/2220539.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/mqingqing123/archive/2011/10/09/2203703.html</id><title type="text">【门户网站】启明星Portal系统里，关于天气预报调用的说明</title><summary type="text">在启明星门户网站OA系统的模板里，增加了对天气预报的调用。效果如下具体使用天气预报的步骤如下：1）打开程序的app_data目录文件2）在这里存放对天气预报调用的设置，主要包括两个参数：url：调用城市的参数（下述）isuseproxy：是否使用代理，天气预报需要访问公网，部分企业需要通过代理才能访问外网。isuseproxy的取值为1或者0。0表示直接访问外网1表示使用代理，当其值为1时，请配置接下来的四个参数：代理用户名，代理密码，代理IP和代理端口。配置完保存一下即可。关于URL：打开国家气象局网站，在这里，找到你所在的那个城市，例如点击“西安”，您会发现地址栏的URL会出席一串数字，记</summary><published>2011-10-09T06:57:00Z</published><updated>2011-10-09T06:57:00Z</updated><author><name>天天</name><uri>http://www.cnblogs.com/mqingqing123/</uri></author><link rel="alternate" href="http://www.cnblogs.com/mqingqing123/archive/2011/10/09/2203703.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/mqingqing123/archive/2011/10/09/2203703.html"/><content type="html">&lt;p&gt;在启明星门户网站OA系统的模板里，增加了对天气预报的调用。效果如下&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img alt="" src="http://pic002.cnblogs.com/images/2011/7841/2011100914431473.png" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;具体使用天气预报的步骤如下：&lt;/p&gt;&#xD;
&lt;p&gt;1）打开程序的app_data目录文件&lt;/p&gt;&#xD;
&lt;p&gt;2）在这里存放对天气预报调用的设置，主要包括两个参数：&lt;/p&gt;&#xD;
&lt;p&gt;url：调用城市的参数（下述）&lt;/p&gt;&#xD;
&lt;p&gt;isuseproxy：是否使用代理，天气预报需要访问公网，部分企业需要通过代理才能访问外网。isuseproxy的取值为1或者0。&lt;/p&gt;&#xD;
&lt;p&gt;0表示直接访问外网&lt;/p&gt;&#xD;
&lt;p&gt;1表示使用代理，当其值为1时，请配置接下来的四个参数：代理用户名，代理密码，代理IP和代理端口。配置完保存一下即可。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img alt="" src="http://pic002.cnblogs.com/images/2011/7841/2011100914460359.png" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="text-decoration: underline;"&gt;&lt;strong&gt;关于URL：&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;打开国家气象局网站，在这里，找到你所在的那个城市，例如点击&amp;ldquo;西安&amp;rdquo;，您会发现地址栏的URL会出席一串数字，记住这个数字，替换掉ULR默认的那个值即可。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img alt="" src="http://pic002.cnblogs.com/images/2011/7841/2011100914511795.png" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="text-decoration: underline;"&gt;&lt;strong&gt;注意：&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;在调用的天气预报里，引用的天气预报图片来自&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://www.weather.com.cn/static/html/legend.shtml"&gt;http://www.weather.com.cn/static/html/legend.shtml&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;我们不能够保证weather，为了保证运行速度，我们已经把这些图片下载到Portal里，但是我们无法保证这些图片的名称不会变更。如果&lt;/p&gt;&#xD;
&lt;p&gt;您在运行Portal后，发现图片无法显示，只需要到legend.shtml里找到相关的图片，并存放到Portal下的images下的weather文件夹里即可。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="text-decoration: underline;"&gt;&lt;strong&gt;技巧：&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;对于天气预报的访问，每隔30分站系统刷新一次，如果您感觉天气预报读取不正确，可以删除app_data下的weather.txt文件，系统将在下次访问时，&lt;/p&gt;&#xD;
&lt;p&gt;自动生成weather.txt文件。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/mqingqing123/aggbug/2203703.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/mqingqing123/archive/2011/10/09/2203703.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/mqingqing123/archive/2011/10/01/2197065.html</id><title type="text">修改表名或者列名SQL</title><summary type="text">exec sp_rename &amp;#39;t1.xx&amp;#39; , yy , &amp;#39;Column&amp;#39;</summary><published>2011-10-01T05:20:00Z</published><updated>2011-10-01T05:20:00Z</updated><author><name>天天</name><uri>http://www.cnblogs.com/mqingqing123/</uri></author><link rel="alternate" href="http://www.cnblogs.com/mqingqing123/archive/2011/10/01/2197065.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/mqingqing123/archive/2011/10/01/2197065.html"/><content type="html">&lt;p&gt;exec&amp;nbsp;&amp;nbsp;&amp;nbsp; sp_rename&amp;nbsp;&amp;nbsp; 't1.xx' , yy , 'Column'&lt;/p&gt;&lt;img src="http://www.cnblogs.com/mqingqing123/aggbug/2197065.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/mqingqing123/archive/2011/10/01/2197065.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/mqingqing123/archive/2011/08/06/2129199.html</id><title type="text">启明星系统简介--兼论启明星OA思想</title><summary type="text">启明星工作室位于上海市黄浦区，成立于2010.1月，我们提供基于微软ASP.NET+MSSQL 的企业内部通用软件解决方案。启明星提供如下7个产品，这些产品可以单独运行，也可以整合在一起运行。事实上，如果这7个产品一起运行，基本上就可以认为是企业内部一个简介、高效的OA系统+CRM系统。启明星产品基于下面的理念而开发：Step1：人事部通常发一些通知，以往一般都是使用邮件群发，但是邮件群发的缺点是不便于归档，所以我们建立了企业门户网站Portal系统，当人事部发布通知后，通过邮件发送是一个通知的的内容和具体的链接，这样用户即使删除了通知，也可以通过企业门户网站找到。因此便诞生了启明星Porta</summary><published>2011-08-06T01:23:00Z</published><updated>2011-08-06T01:23:00Z</updated><author><name>天天</name><uri>http://www.cnblogs.com/mqingqing123/</uri></author><link rel="alternate" href="http://www.cnblogs.com/mqingqing123/archive/2011/08/06/2129199.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/mqingqing123/archive/2011/08/06/2129199.html"/><content type="html">&lt;p&gt;启明星工作室位于上海市黄浦区，成立于2010.1月，我们提供基于微软ASP.NET+MSSQL 的企业内部通用软件解决方案。&lt;/p&gt;&#xD;
&lt;p&gt;启明星提供如下7个产品，这些产品可以单独运行，也可以整合在一起运行。&lt;/p&gt;&#xD;
&lt;p&gt;事实上，如果这7个产品一起运行，基本上就可以认为是企业内部一个简介、高效的OA系统+CRM系统。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;启明星产品基于下面的理念而开发：&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;Step1：&lt;/strong&gt;人事部通常发一些通知，&lt;strong&gt;以往一般都是使用邮件群发，但是邮件群发的缺点是不便于归档&lt;/strong&gt;，所以我们建立了&lt;/p&gt;&#xD;
&lt;p&gt;企业门户网站Portal系统，当人事部发布通知后，通过邮件发送是一个通知的的内容和具体的链接，这样用户即使&lt;/p&gt;&#xD;
&lt;p&gt;删除了通知，也&lt;strong&gt;可以通过企业门户网站找到&lt;/strong&gt;。因此便诞生了启明星Portal系统。&lt;/p&gt;&#xD;
&lt;p&gt;（以上仅介绍Portal最基本的功能，其实际功能远不止这些）。&lt;/p&gt;&#xD;
&#xD;
&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;Step2：&lt;/strong&gt;企业规模越来越大，会议越来越多，会议室冲突接踵而至，&lt;strong&gt;以往为了订会议室，都是联系专员或前台&lt;/strong&gt;，&lt;/p&gt;&#xD;
&lt;p&gt;不但效率低，而且还可能出错，所以启明星工作室开发了启明星会议室预定管理系统Book。&lt;/p&gt;&#xD;
&lt;p&gt;启明星预定系统可以和outlook进行松耦合集成，在预定会议时不但把会议室的使用状态设置为&amp;ldquo;占用&amp;rdquo;，&lt;/p&gt;&#xD;
&lt;p&gt;而且&lt;strong&gt;还会发生邮件到与会者&lt;/strong&gt;，简单、适用。&lt;/p&gt;&#xD;
&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;Step3:&lt;/strong&gt;企业办公中，电脑、打印机等是不可少，一方面office故障、硬件损坏等需求IT支持的问题不断，另一面IT人员还需要&lt;/p&gt;&#xD;
&lt;p&gt;把机器信息录入Excel方便电脑盘点，结果IT人员很忙，但是效率低下，&lt;strong&gt;一个常规的问题例如outlook无法打开exe附件，可能&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;让IT人员在重复告知用户&lt;/strong&gt;，因此开发了Helpdesk，&lt;strong&gt;Helpdesk具有问题管理、电脑盘点、电脑采购、知识库等&lt;/strong&gt;功能。&lt;/p&gt;&#xD;
&lt;p&gt;在用户有问题时，先查知识库，再提交问题到Helpdesk，IT根据人员和时间安排处理方法，即高效又让用户满意。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;Step4.&lt;/strong&gt;工作日志就是记录工作流水账，其实不管是给自己看的便签纸还是给老板看的周报，可以说，&lt;strong&gt;工作日志都是一个轻量级的&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;Outlook&lt;/strong&gt;，一个项目，告诉同事您的进度，同时别人可以查看您的工作安排，这和发邮件询问并无差别。就像一句话，写在新闻后是评论，&lt;/p&gt;&#xD;
&lt;p&gt;写在论坛后是跟帖，下载博客里是文章。但其目的性不同，所以启明星工作日志并不是可以取代的Outlook，启明星Worklog大致分为三个板块：自&lt;strong&gt;己的日志、简单的客户通讯录CRM和项目进度&lt;/strong&gt;，系统他能够给您的工作带来效率。&lt;/p&gt;&#xD;
&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;Step5&lt;/strong&gt;.员工请假Appform是人事部常见的一个任务，一般假期没什么好说的，主要是年休假，&lt;strong&gt;年休假是和职级、年限挂钩的&lt;/strong&gt;，也就是他是一个动态的，启明星appform可以帮助您解决这个问题，另外&lt;strong&gt;加班、统计功能&lt;/strong&gt;，&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;Step6。&lt;/strong&gt;采购系统Purchase主要是行政部门使用，水笔、本子、桌子、电话、等等，采购系统将系统分文两大类，一类是不值钱的，例如水笔，可以直接&lt;/p&gt;&#xD;
&lt;p&gt;领用，另外一类需要审批的，例如电话。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;Step7，&lt;/strong&gt;启明星投票系统Vote是一个简单的内部投票，例如最佳十佳员工候选、最喜欢的宠物等活动投票。配合启明星其他系统使用，本系统&lt;/p&gt;&#xD;
&lt;p&gt;主要用于对其他系统的补充，增加点娱乐气氛。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #008000;"&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #008000;"&gt;&lt;strong&gt;1）启明星门户网站系统Portal&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #008000;"&gt;&lt;strong&gt;DEMO: &lt;a href="http://demo.dotnetcms.org/"&gt;http://demo.dotnetcms.org&lt;/a&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;span style="color: #008000;"&gt;&lt;strong&gt;2）启明星会议室预定系统Book&lt;br /&gt;DEMO: &lt;a href="http://portal.dotnetcms.org/book"&gt;http://portal.dotnetcms.org/book&lt;/a&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #008000;"&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #008000;"&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #008000;"&gt;&lt;strong&gt;3）启明星帮助台系统Helpdesk&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #008000;"&gt;&lt;strong&gt;DEMO: &lt;a href="http://portal.dotnetcms.org/helpdesk"&gt;http://portal.dotnetcms.org/helpdesk&lt;/a&gt; &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #008000;"&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #008000;"&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #008000;"&gt;&lt;strong&gt;4）启明星工作日志系统Worklog&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #008000;"&gt;&lt;strong&gt;DEMO: &lt;/strong&gt;&lt;strong&gt;&lt;a href="http://portal.dotnetcms.org/worklog"&gt;http://portal.dotnetcms.org/worklog&lt;/a&gt; &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #008000;"&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #008000;"&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #008000;"&gt;&lt;strong&gt;5）启明星请假系统Appform&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #008000;"&gt;&lt;strong&gt;DEMO: &lt;/strong&gt;&lt;strong&gt;&lt;a href="http://portal.dotnetcms.org/appform"&gt;http://portal.dotnetcms.org/appform&lt;/a&gt; &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #008000;"&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #008000;"&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #008000;"&gt;&lt;strong&gt;6）启明星采购系统Purchase&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #008000;"&gt;&lt;strong&gt;DEMO: &lt;/strong&gt;&lt;strong&gt;&lt;a href="http://portal.dotnetcms.org/purchase"&gt;http://portal.dotnetcms.org/purchase&lt;/a&gt; &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #008000;"&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #008000;"&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #008000;"&gt;&lt;strong&gt;7）启明星投票系统Vote&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #008000;"&gt;&lt;strong&gt;DEMO:&lt;a href="http://portal.dotnetcms.org/vote"&gt;http://portal.dotnetcms.org/vote&lt;/a&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #008000;"&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #008000;"&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/mqingqing123/aggbug/2129199.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/mqingqing123/archive/2011/08/06/2129199.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/mqingqing123/archive/2011/07/29/2121198.html</id><title type="text">启明星门户网站Portal发布V4.5，并兼论部分功能的实现</title><summary type="text">今天发布了启明星Portal系统V4.5.0.0 下载地址 http://www.dotnetcms.org/download/portal/portal4.5.0.0.rar,本文主要介绍分功能的实现与分享，欢迎反馈。</summary><published>2011-07-29T08:35:00Z</published><updated>2011-07-29T08:35:00Z</updated><author><name>天天</name><uri>http://www.cnblogs.com/mqingqing123/</uri></author><link rel="alternate" href="http://www.cnblogs.com/mqingqing123/archive/2011/07/29/2121198.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/mqingqing123/archive/2011/07/29/2121198.html"/><content type="html">&lt;p&gt;下载地址 &lt;a href="http://www.dotnetcms.org/download/portal/portal4.5.0.0.rar"&gt;http://www.dotnetcms.org/download/portal/portal4.5.0.0.rar&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;今天发布了启明星Portal系统V4.5.0.0，其实我在测试时，已经发现了部分错误，因为有一些客户一直催着快的做，也就在&amp;ldquo;大干快上&amp;rdquo;的思想上，先发布了。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://www.dotnetcms.org/portal/uploads/2011-07/201107270314_1.JPG" width="1000" height="609" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;在这里，我们并没有公开源代码，但是通过对部分知识点的介绍，你还是能够了解部分技术的实现。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;1。换肤&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;换肤的方法有很多，一般这里有两种：&lt;/p&gt;&#xD;
&lt;p&gt;1）使用用户控件，类似博客园&lt;/p&gt;&#xD;
&lt;p&gt;例如在有一个default.aspx页面，现在有红色和蓝色两种主题，位置分别为 red/index.ascx 和blue/index.ascx&lt;/p&gt;&#xD;
&lt;p&gt;那么在default.aspx里使用&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #000000;"&gt;Control c &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;Page.LoadControl(ascxfile)&lt;br /&gt;Page.Control.Add(c);&lt;br /&gt; &lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;通过修改index.ascx即可动态实现换肤。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;2）使用master&lt;/p&gt;&#xD;
&lt;p&gt;在我们的Portal系统里，除了使用第一种外，还使用了动态更改master的方式。代码示意如下：在Page的Init事件里更改页面的主题。&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #000000;"&gt;    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; Page_PreInit(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt;&lt;span style="color: #000000;"&gt; sender, EventArgs e)&lt;br /&gt;    {&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;&lt;span style="color: #000000;"&gt;.MasterPageFile &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: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;master.master&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;         &lt;br /&gt;    }&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;当然，如果仅仅那么做，也只是更改页面的布局，例如将table的行由2换成3，但是table的样式，例如字体是红色，在更换master后，仍然是红色，所以，还需要修改页面的css，这里使用了web.config里theme 属性。也就是，：&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #000000;"&gt;    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; Page_PreInit(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt;&lt;span style="color: #000000;"&gt; sender, EventArgs e)&lt;br /&gt;    {&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt; (Page.Theme &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: #0000ff;"&gt;null&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br /&gt;        {&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;&lt;span style="color: #000000;"&gt;.MasterPageFile &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; "default.master";&lt;br /&gt;        }&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;else&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;        {&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;&lt;span style="color: #000000;"&gt;.MasterPageFile &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: #800000;"&gt;&lt;span style="color: #000000;" color="#000000"&gt;Page.Theme+".master"&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;    }&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;这样当用户修改web.config里 theme时，其母版跟着变动，同时引用的CSS也同样跟着变动。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;2.天气预报&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;在Portal系统里，使用了天气预报，下面列出了天气预报的代码，天气预报每隔30分钟读取一次，读取后，会写入app_data下的weather.xml里，&lt;/p&gt;&#xD;
&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #000000;"&gt;    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;static&lt;/span&gt;&lt;span style="color: #000000;"&gt;  &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt; getWeather()&lt;br /&gt;    {&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt; file&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;HttpContext.Current.Server.MapPath(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;~/app_data/weather.txt&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;        DateTime dt1 &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; DateTime.Now;&lt;br /&gt;        DateTime dt2 &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; DateTime.Now;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;bool&lt;/span&gt;&lt;span style="color: #000000;"&gt; isexists &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: #0000ff;"&gt;false&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt; (File.Exists(file))&lt;br /&gt;        {&lt;br /&gt;            dt2 &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; File.GetLastWriteTime(file);&lt;br /&gt;            isexists &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: #0000ff;"&gt;true&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;        }&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;else&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;        {&lt;br /&gt;            isexists &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: #0000ff;"&gt;false&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;            File.Create(file);&lt;br /&gt;        }&lt;br /&gt;       &lt;br /&gt;        &lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt; ( (dt1.Subtract(dt2).Minutes &lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #800080;"&gt;30&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;!&lt;/span&gt;&lt;span style="color: #000000;"&gt;isexists))&lt;br /&gt;        {&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;每隔30小时读取一次&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;            DataTable dt &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; Helper.ReadConfigXml(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;~/app_data/weather.xml&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;bool&lt;/span&gt;&lt;span style="color: #000000;"&gt; userproxy &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; Helper.ReadConfigValue(dt, &lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;isuseproxy&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;).ToString() &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: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;1&lt;/span&gt;&lt;span style="color: #800000;"&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; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;&lt;span style="color: #000000;"&gt; : &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;false&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt; ip &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; Helper.ReadConfigValue(dt, &lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;ip&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;).ToString();&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; port &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: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt;.Parse(Helper.ReadConfigValue(dt, &lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;port&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;).ToString());&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt; proxyusername &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; Helper.ReadConfigValue(dt, &lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;proxyusername&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;).ToString();&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt; proxypassword &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; Helper.ReadConfigValue(dt, &lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;proxypassword&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;).ToString();&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt; url &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; Helper.ReadConfigValue(dt, &lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;url&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;).ToString();&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt; responseFromServer &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: #800000;"&gt;""&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt; (userproxy)&lt;br /&gt;            {&lt;br /&gt;&lt;br /&gt;                WebProxy myProxy &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: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; WebProxy(ip, port);&lt;br /&gt;                myProxy.Credentials &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: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; NetworkCredential(proxyusername, proxypassword);&lt;br /&gt;                myProxy.BypassProxyOnLocal &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: #0000ff;"&gt;true&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;                WebRequest.DefaultWebProxy &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; myProxy;&lt;br /&gt;                WebRequest myWebRequest &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; WebRequest.Create(url);&lt;br /&gt;                myWebRequest.Timeout &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: #800080;"&gt;60000&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;&lt;br /&gt;                HttpWebResponse response &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; (HttpWebResponse)myWebRequest.GetResponse();&lt;br /&gt;&lt;br /&gt;                Stream dataStream &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; response.GetResponseStream();&lt;br /&gt;                StreamReader reader &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: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; StreamReader(dataStream);&lt;br /&gt;                responseFromServer &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; reader.ReadToEnd();&lt;br /&gt;&lt;br /&gt;                reader.Close();&lt;br /&gt;                dataStream.Close();&lt;br /&gt;                response.Close();&lt;br /&gt;&lt;br /&gt;            }&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;else&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;            {&lt;br /&gt;                WebRequest request &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; WebRequest.Create(url);&lt;br /&gt;                request.Credentials &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; CredentialCache.DefaultCredentials;&lt;br /&gt;                HttpWebResponse response &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; (HttpWebResponse)request.GetResponse();&lt;br /&gt;                Stream dataStream &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; response.GetResponseStream();&lt;br /&gt;                StreamReader reader &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: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; StreamReader(dataStream);&lt;br /&gt;                responseFromServer &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; reader.ReadToEnd();&lt;br /&gt;                reader.Close();&lt;br /&gt;                dataStream.Close();&lt;br /&gt;                response.Close();&lt;br /&gt;&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            File.WriteAllText(file, responseFromServer);&lt;br /&gt;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt; File.ReadAllText(file);&lt;br /&gt;&lt;br /&gt;      &lt;br /&gt;&lt;br /&gt;    }&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;对天气预报的访问，需要访问互联网，部分公司是使用代理的，在app_data下有一个weather.xml文件，用来配置天气预报的信息。上面的程序如果你需要直接使用，可以将proxyusername ，proxypassword等修改为你字符串变量就可以了。&lt;/p&gt;&#xD;
&lt;p&gt;在天气预报的后台（也就是weather.aspx.cs里）的Page_Load事件代码是：&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #000000;"&gt;  &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; Page_Load(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt;&lt;span style="color: #000000;"&gt; sender, EventArgs e)&lt;br /&gt;        {&lt;br /&gt;           &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt; a&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; WeatherHelper.getWeather();&lt;br /&gt;           Page.RegisterClientScriptBlock(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;data&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;, &lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;&amp;lt;script&amp;gt; var jsData=&lt;/span&gt;&lt;span style="color: #800000;"&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; a &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: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;          &lt;br /&gt;        }&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;然后再前台就可以调用了 （天气预报调用地址：&lt;a href="http://m.weather.com.cn/data/101020100.html"&gt;http://m.weather.com.cn/data/&lt;em&gt;&lt;strong&gt;101020100&lt;/strong&gt;&lt;/em&gt;.html&lt;/a&gt;）&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #000000;"&gt;  &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;div &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;class&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="weather"&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;ul&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;li&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;img &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;id&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="wdicon1"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; src&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="../Images/Weather/blank.gif"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; align&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="absmiddle"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; style&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="padding-right:2px"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; alt&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;=""&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;span &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;id&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="wdContent1"&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;span&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;li&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;li &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;style&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="padding-left:10px"&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;img &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;id&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="wdicon2"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; src&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="../Images/Weather/blank.gif"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; align&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="absmiddle"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; style&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="padding-right:2px"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; alt&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;=""&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;span &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;id&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="wdContent2"&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;span&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;li&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;ul&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;    &lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;div&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;   &lt;br /&gt;    &lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;script&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;&lt;br /&gt; &lt;br /&gt;        document.getElementById(&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;'&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;wdContent1&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;'&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;).innerHTML&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;=&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;'&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;今日&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;'&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt; &lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;+&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt; jsData.weatherinfo.img_title1 &lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;+&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt; &lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;'&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt; &lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;'&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt; &lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;+&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt; jsData.weatherinfo.temp1.replace(&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;'&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;~&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;'&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;, &lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;'&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;/&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;'&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;).replace(&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;'&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;℃&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;'&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;, &lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;''&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;);&lt;br /&gt;         document.getElementById(&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;'&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;wdContent2&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;'&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;).innerHTML&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;=&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;'&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;明日&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;'&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt; &lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;+&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt; jsData.weatherinfo.img_title3 &lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;+&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt; &lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;'&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt; &lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;'&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt; &lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;+&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt; jsData.weatherinfo.temp2.replace(&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;'&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;~&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;'&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;, &lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;'&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;/&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;'&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;).replace(&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;'&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;℃&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;'&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;, &lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;''&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;);&lt;br /&gt;        document.getElementById(&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;'&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;wdicon1&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;'&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;).src&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;=&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;'&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;../Images/Weather/d&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;'&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt; &lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;+&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt; jsData.weatherinfo.img_title1 &lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;+&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt; &lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;'&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;.gif&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;'&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;;&lt;br /&gt;         document.getElementById(&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;'&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;wdicon2&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;'&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;).src&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;=&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;'&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;../Images/Weather/d&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;'&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt; &lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;+&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt; jsData.weatherinfo.img_title3 &lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;+&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt; &lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;'&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;.gif&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;'&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;;&lt;br /&gt;        document.getElementById(&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;'&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;wdicon1&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;'&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;).alt&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;=&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;jsData.weatherinfo.weather1;&lt;br /&gt;         document.getElementById(&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;'&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;wdicon2&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;'&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;).alt&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;=&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;jsData.weatherinfo.weather2;   &lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;script&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&#xD;
&lt;p&gt;成功后的效果如下：（具体参考下载包里效果）&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img alt="" src="http://pic002.cnblogs.com/images/2011/7841/2011072916072375.png" /&gt;&lt;/p&gt;&#xD;
&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;3.关于首页右边图片滚动切换&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;在Portal首页右边，有一个图片滚动切换，这里使用了MSClass （具体地址是 &lt;a href="http://www.popub.net/script/MSClass.html"&gt;http://www.popub.net/script/MSClass.html&lt;/a&gt;&amp;nbsp;这是一个很不错的JS插件）&lt;/p&gt;&#xD;
&lt;p&gt;推荐一下。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;4.关于Cookie&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Cookie是一个老生常谈的问题，在我的网站里，除了Portal系统还有预定系统Book，Helpdesk系统，当初为了方便，将用户登录做在了一个模块里，例如用户输入&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://localhost/portal"&gt;http://localhost/portal&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://localhost/helpdesk"&gt;http://localhost/helpdesk&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://localhost/book"&gt;http://localhost/book&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;就可以访问这3个系统，但是他们的cookie名称都是username，也就是在登录时，代码类似如下：&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #000000;"&gt;       HttpContext.Current.Response.Cookies["userinfo"]["userid"] = uid.ToString();&lt;br /&gt;      HttpContext.Current.Response.Cookies["userinfo"]["username"] = HttpContext.Current.Server.UrlEncode(dr["username"].ToString());&lt;br /&gt;      HttpContext.Current.Response.Cookies["userinfo"].Expires = DateTime.Now.AddDays(2);&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;这样，当用户退出一个系统时，全部退出，当登录一个系统时，全部登录，（默认的cookie path是&amp;ldquo;/&amp;rdquo;）&lt;/p&gt;&#xD;
&lt;p&gt;还无疑问，只能够通过Application path来区分。&lt;/p&gt;&#xD;
&lt;p&gt;因此增加了如下代码&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #000000;"&gt;  HttpContext.Current.Response.Cookies["userinfo"].Path = path;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;原本以为这样就可以了，但是在使用身份验证票时出现了问题，我们可以看看MSDN里&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #000000;"&gt;  FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, i.ToString(), DateTime.Now, DateTime.Now.AddDays(7), true, Roles,cookiePath);&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;此处的CookiePath是一个动态的，通过设置其值就可以。上面代码看起来很好，但是用户在退出时，用SignOut方法时&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #000000;"&gt;FormsAuthentication.SignOut()&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;发现无效，最终只能够使用如下列来清除身份验证票。&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #000000;"&gt;                HttpContext.Current.Response.Cookies[FormsAuthentication.FormsCookieName].Path = path;&lt;br /&gt;                HttpContext.Current.Response.Cookies[FormsAuthentication.FormsCookieName].Expires = DateTime.Now.AddDays(-1);&lt;br /&gt;             &lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&#xD;
&lt;p&gt;关于其他分享，后续会陆续介绍，欢迎拍砖 (*^__^*) 嘻嘻&amp;hellip;&amp;hellip;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;下载地址 &lt;a href="http://www.dotnetcms.org/download/portal/portal4.5.0.0.rar"&gt;http://www.dotnetcms.org/download/portal/portal4.5.0.0.rar&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;演示 &lt;a href="http://demo.dotnetcms.org"&gt;http://demo.dotnetcms.org&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;我的网站 &lt;a href="http://www.dotnetcms.org"&gt;http://www.dotnetcms.org&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/mqingqing123/aggbug/2121198.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/mqingqing123/archive/2011/07/29/2121198.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
