2006年09月26日

using System.Management;

/// <summary>
/// 获取MAC地址
/// </summary>
/// <returns></returns>
public string GetNetCardMacAddress()
{
ManagementClass mc;
ManagementObjectCollection moc;
mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
moc = mc.GetInstances();
string str = "";
foreach(ManagementObject mo in moc)
{
if((bool)mo["IPEnabled"] == true)
str = mo["MacAddress"].ToString();

}
return str;
}

/// <summary>
/// C盘序列号
/// </summary>
/// <returns></returns>
public string GetDiskVolumeSerialNumber()
{
ManagementObject disk;
disk = new ManagementObject("win32_logicaldisk.deviceid=\"c:\"");
disk.Get();
return disk.GetPropertyValue("VolumeSerialNumber").ToString();
}

为什么研究这个案例
在不到三年的时间里,MySpace成为全美访问量前五名的网站。2006年6月独立访问量4800万,页面浏览量274亿。也许它的盈利程度赶不上Google、eBay或Yahoo,但它很可能成为下一个互联网“平台”。而MySpace一举超越更早进入社会性网络领域的Friendster,也使得MySpace成为案例研究的好材料。
我进行了如下采访:几位在MySpace发展早期于该公司有密切关系的人士,尽管他们现在已经与MySpace没有什么联系。社会性网络从业的有关人员--包括竞争对手公司的产品经理和MySpace的服务提供商,等等。我本人是MySpace一个竞争对手的董事会观察员(board observer)。
成功的关键
给用户更多自由设计他们的MySpace主页,让用户能高度地表达自我和与朋友交流
MySpace的成功有很多因素。但如果让我选择一个,就是这一条。MySpace的早期成功开始于十几岁的孩子的用户群。这些孩子们用MySpace分享照片、交流、制作他们自己最棒的个人主页。让独立制作乐队来引领用户发现音乐是一个很好的功能,但并不构成MySpace主要的访问量。另外,不少用户确实利用MySpace找对象,但这类活动主要发生在21-26岁的用户中,而这不是MySpace的主要用户群。
分享照片的重要性怎样强调都不为过。数字照相机和手机照相功能的普及是很多社会性网络发展的驱动力,不光是MySpace。MySpace让它的用户可以使用第三方服务如PhotoBucket和ImageShack在个人主页中加入更多照片。我认为这是MySpace超越Friendster的一个重要原因。
缩短开发周期,使产品迅速适应用户要求
MySpace具体采取了什么措施来实现这个高度自我表达的环境呢?它采取了一个最基本的策略:不要预先去想像用户会想要如何在这个网站中互动。当用户自发地制作相同兴趣用户组群的主页时,MySpace接受了这种用户行为,而Friendster没有。MySpace倾听用户的反馈、快速开发、快速推出新产品。MySpace增加Blog、留言板、讨论区、即时通讯等功能都远远早于Friendster。部分原因是Friendster受到系统扩容问题的困扰。当用户用技术手段改动MySpace个人主页功能,把更多PhotoBucket的照片加到个人主页时,MySpace也没有干预这种尝试。通过这种改动,用户可以在他们的朋友的留言版加照片和图片。这个功能成了让用户在MySpace花更多时间的一个主要原因。
最初的用户积累依靠三种手段的结合:病毒式增长、非网络广告、网络传播合作伙伴
大家广泛认为MySpace上线后立刻通过口口相传的病毒式传播迅速增长用户群。实事不是这样。MySpace利用了多种战术的结合,包括成功地运用了传统的推广手段、利用已有的网络品牌来花钱收集用户(Cost per acquisition, CPA)。MySpace是Intermix公司中的ResponseBase团队的作品,这个团队有很强的电子邮件营销和CPA的背景。当MySpace的用户量达到几百万后,他们才开始依靠病毒传播。在“启动战略”部分我会深入分析这一点。
有关产品和研发政策的决策,要考虑到网站的负载能力
被大家熟知的Friendster和MySpace竞争的一个重要转折点是:Friendster的用户由于网站负载能力的问题而放弃使用Friendster。尽管这是由于Friendster自身的问题造成的,但在MySpace方面,他们在早期设计阶段就充分考虑了这一点。首先,MySpace决定不显示“朋友链”。“朋友链”这个显示朋友连接关系的功能,在网站上随时显示时会极大加重系统的运算量。为了保证网站的负载能力,MySpace决定不提供这个Friendster的核心功能。第二,早期发展中,MySpace只允许美国用户注册。Friendster曾经在(现在仍旧在)菲律宾相当成功。但很不幸的是,在网络品牌广告市场在亚洲成熟之前,这些来自菲律宾的流量更多的是花费,而不是收入。而对于能产生广告价值的美国用户,这却对网站的访问速度等负载指标产生了负面影响。MySpace直到美国用户量突破了临界点后才开放其他国家的注册,这成为一个正确的决定。
启动战略

MySpace的主意最初来自Intermix的Chris DeWolfe和Tom Anderson。他们是通过Intermix收购ResponseBase加入Intermix的。很多ResponseBase的成员之前来自X-drive,因此,他们有很强的针对网络个人用户的开发和推广经验。看到Friendster最初的成功,并意识到他们在ResponseBase/Intermix所拥有的资源后,他们认为自己能在这个领域很有竞争力。ResponseBase有一个包括一亿电子邮件的数据库;Intermix拥有几个网站,而这些网站的用户很多处在MySpace用户的年龄段。
MySpace花了三个月时间开发出一个和Friendster功能类似的网站,并于2003年底上线。MySpace最初的战略并没有以独立制作乐队和围绕音乐的社会网络为目标。有关音乐的主题是以用户为中心的网站发展过程中自然发展出来的。有趣的是,在最初上线和开始推广后的6到9个月,用户增长并不成功。MySpace最初的推广手段是在Intermix的员工(约250人)中进行有奖竞赛,让员工们邀请他们的朋友注册。这产生了一定效果,但用户数很有限。接下来,他们利用ResponseBase的电子邮件列表进行邮件推广。这有一些影响,但基本上是失败的。这是因为电子邮件推广不能象已经存在的小组或组织那样吸引能对网站产生忠实度的用户。于是MySpace开始进行线下推广,对洛杉矶地区的Club、乐队、和各种派对进行赞助。这些努力逐渐给MySpace造成影响。更重要的是吸引了很多小的线下社区(即小组)来使用MySpace。100到1000人之间的小社区开始产生雪球式的病毒增长,并吸引更多的个人用户加入。

最初用户建立起来后,MySpace开始进一步利用Intermax的渠道和媒体关系扇风助燃。合作伙伴的推广结合上已有的较强用户基础,使得MySpace从最初的成功走向腾飞。如果没有利用传统的推广手段,MySpace恐怕不会有我们今天看到的高速增长。
财务结果分析
Intermix 于2005年7月被Fox(译者:Fox是莫多克新闻集团的一部分)收购,MySpace是收购的主要原因。我估计MySpace的价值大约为Fox的出价(5亿8千万美元)与Intermix作为上市公司的市值(约1亿美元)之差。即MySpace的收购价在5亿美元上下。但这启收购案中还有一个复杂因素,就是Intermix公司当时面临的侵犯互联网用户隐私的法律纠纷。Fox收购Intermix后则这些官司也转嫁到Fox头上,这使得MySpace的实际收购价值可能比5亿美元还高得多。
据报道,MySpace在2005年计划收入2千万美元,但当时公司正出于一个急速上升的情况。2005年第二季度的收入约为6百万美元。根据这些数据,Fox的出价大约是MySpace年收入的20倍,在当时被很多人认为买贵了。然而收购不到一年,MySpace每月的广告收入已经大约有8百万美元。按照这个数据,Fox的收购付了MySpace年收入的5倍,这还是个很合理的价格。再考虑到MySpace的品牌效应和对美国文化产生的冲击,应该说Fox花5亿美元收购MySpace是非常英明的(特别是再联系到最近Fox和Google之间的9亿美元的交易)。(译者:Fox和Google的交易中很重要的一部分是在所有MySpace页面放置Google搜索)而人们不禁要反思为什么当初Yahoo、MSN、AOL、和Google错过了收购MySpace的机会。为什么不是这些互联网业的巨头预测到MySpace在互联网上的巨大增长潜力呢?
再让我们看看风险投资和创始人的收益如何?Bill Burnham有一篇非常好的详细分析 ,我就不重复他的发现了。Redpoint风投公司在2005年2月用1150万美元帮助MySpace从Intermix中分拆(spinout)出来,并由此获得25%的股份。由此计算,资金注入前MySpace的估值约为3500万美元。这次分拆发生时MySpace已经相当成功了,稳坐Alexa排名100以内。(原作者注:很有趣地注意到过去一年半中对已经有一定成功度的互联网公司的估值发生了很大变化。Redpoint对MySpace这个排100名以内的用户产生内容的公司的估值3500万美元。而Facebook、Bebo、YouTube、Tagged等网站在融资时的估值远远高于这个。)Intermax在和约中很聪明地增加了这样一个条款:如果Intermix在一年中被收购,将有权以一固定的价格买回Redpoint手中的MySpace股份。根据这一条款,MySpace被收购给Redpoint风投公司带来了约6500万美元的回报(五个月中大约回报了4倍)。这是极好的回报率。也让我们看到风险投资不一定要去发现下一个好主意是什么,想法挤进已经在运作中的下一个好主意也不错。VantagePoint风投伙伴公司获得的回报最高。他们早在MySpace成功之前就是Intermix的投资者。作为Intermix的大股东,他们1500万美元的投资换回1亿3900万,9.1倍的回报。VantagePoint并不是因为MySpace而投资,但成为了MySpace成功的收益者。
那么创始人Chris、Tom和其他ReponseBase团队的成员从Fox收购中获利如何呢?Intermix从开始就完全拥有MySpace的股份,因此MySpace的资产结构不是一个典型的创业公司的构成。然而,我被告知在MySpace早期,Intermix给ResponseBase团队成员以5万美元购买1/3的MySpace股份的股票期权。当时的合同在这里可以看到。Chris和Tom都参加了“这一轮”资产组构。加上后来又随时间分配的、及以奖金形式获得的股票期权,他们应该都身价几百万以上了。

总结与思考
如果按照注册用户数把MySpace和Skype算作最大的Web2.0的成功案例的话,我想我们应该注意到一个有趣的共同点:他们在起步初期都得益于和一个强大的推广渠道成为伙伴。我以后要写的Skype案例分析会提到,Skype最初的推广是通过Kazaa(译者:一个P2P下载网络)。由于Skype的创始人就是Kazaa的创始人,他们很轻易地通过在Kazaa客户端软件对Skype进行推广获得了最初的用户。虽然Skype和MySpace都是有病毒型传播能力的产品,但如果没有最初传统推广渠道的激励,他们恐怕不会在如此短的时间获得如此大的成功。

进一步,Web2.0的创业者们应该意识到他们不仅仅是在和反应迟钝的大公司竞争,同时也在和那些也在初创阶段,但已经把强大的推广渠道掌握在手中的小公司竞争。除Skype和MySpace之外,广告网络领域也有类似的案例。比如Livedigital.com,由广告网络公司Oversee.net创办,9个月内就进入Alexa前5000名。另一个网络广告公司Blue Lithium采用了类似的策略,用它自己网站的剩余广告空间为它的另一个社区网站作宣传。那么后来者如TagWorld和MyYearBook如何呢?你在MySpace的“生态圈”(那些专门为MySpace用户提供图像和HTML编程服务的网站)随处可见他们的广告。这些推广的效果可能大相径庭,但不可否认大家都在用这些手段。也许Web2.0的新思维对传统的推广渠道不屑一顾,但MySpace和Skype都证明在Web2.0的热浪中,建立推广渠道伙伴不可忽视。
如果创业者选择了纯病毒式推广的道路 ,那你的产品必须能非常明确地给用户带来极大的价值,而且简单易用。否则,其他有推广渠道的创业公司将成为你难以逾越的竞争对手。

2006年09月23日

一、本机直接上网时:
#region 获取指定远程网页内容
/// <summary>
/// 获取指定远程网页内容
/// </summary>
/// <param name="strUrl">所要查找的远程网页地址</param>
/// <param name="timeout">超时时长设置,一般设置为8000</param>
/// <param name="enterType">是否输出换行符,0不输出,1输出文本框换行</param>
/// <param name="EnCodeType">编码方式</param>
/// <returns></returns>
/// 也可考虑 static string

public string GetRequestString(string strUrl,int timeout,int enterType,Encoding EnCodeType)
{
string strResult;
try
{
HttpWebRequest myReq = (HttpWebRequest)HttpWebRequest.Create(strUrl) ;
myReq.Timeout = timeout;
HttpWebResponse HttpWResp = (HttpWebResponse)myReq.GetResponse();
Stream myStream = HttpWResp.GetResponseStream () ;
StreamReader sr = new StreamReader(myStream , EnCodeType);
StringBuilder strBuilder = new StringBuilder();

while (-1 != sr.Peek())
{
strBuilder.Append(sr.ReadLine());
if(enterType==1)
{
strBuilder.Append("\r\n");
}
}
strResult = strBuilder.ToString();
}
catch(Exception err)
{
strResult = "请求错误:" + err.Message;
}
return strResult ;
}

#endregion二:通过域环境代理上网时这样就不行了!

private void Page_Load(object sender, System.EventArgs e)
{

string url1 = "http://csharp.xdowns.com";
string url2 = "http://csharp.xdowns.com/logo.gif";
Response.Write("<li>方法1:");
Response.Write(url1 + " 存在:" + UrlExistsUsingHttpWebRequest(url1).ToString());
Response.Write("<li>方法2:");
Response.Write(url1 + " 存在:" + UrlExistsUsingSockets(url1).ToString());
Response.Write("<li>方法3:");
Response.Write(url1 + " 存在:" + UrlExistsUsingXmlHttp(url1).ToString());

Response.Write("<li>方法1:");
Response.Write(url2 + " 存在:" + UrlExistsUsingHttpWebRequest(url2).ToString());
Response.Write("<li>方法3:");
Response.Write(url2 + " 存在:" + UrlExistsUsingXmlHttp(url2).ToString());
}
private bool UrlExistsUsingHttpWebRequest(string url)
{
try
{
System.Net.HttpWebRequest myRequest =(System.Net.HttpWebRequest)System.Net.WebRequest.Create(url);
myRequest.Method = "HEAD";
myRequest.Timeout = 100;
System.Net.HttpWebResponse res = (System.Net.HttpWebResponse)myRequest.GetResponse();
return (res.StatusCode == System.Net.HttpStatusCode.OK);
}
catch(System.Net.WebException we)
{
System.Diagnostics.Trace.Write(we.Message);
return false;
}
}
private bool UrlExistsUsingXmlHttp(string url)
{
//注意:此方法需要引用Msxml2.dll
MSXML2.XMLHTTP _xmlhttp = new MSXML2.XMLHTTPClass();
_xmlhttp.open("HEAD",url,false,null,null);
_xmlhttp.send("");
return (_xmlhttp.status == 200 );
}

private bool UrlExistsUsingSockets(string url)
{
if(url.StartsWith("http://")) url = url.Remove(0,"http://".Length);
try
{
System.Net.IPHostEntry ipHost = System.Net.Dns.Resolve(url);
return true;
}
catch (System.Net.Sockets.SocketException se)
{
System.Diagnostics.Trace.Write(se.Message);
return false;
}
}

//取得输入的URL地址
PageUrl = UrlText.Text;
WebClient wc = new WebClient();
//把已登录的用户或正被模拟的用户的用户凭据赋给用于对向Internet资源的请求进行身份验证的网络凭据
wc.Credentials = CredentialCache.DefaultCredentials;

///方法一:
///从指定的URI下载数据
Byte[] pageData = wc.DownloadData(PageUrl);
//把下载到的字符型数组数据转换成字符串类型
ContentHtml.Text = Encoding.Default.GetString(pageData);

/// 方法二
//为指定的URI打开一个可读的数据流,并定义一个该流的引用
/// Stream resStream = wc.OpenRead(PageUrl);
/// 根据上面定义的数据流,以默认编码的方式定义一个读数据流
/// StreamReader sr = new StreamReader(resStream,System.Text.Encoding.Default);
/// 读取数据流中的内容
/// ContentHtml.Text = sr.ReadToEnd();
/// //关闭数据流
/// resStream.Close();
/// 
//释放资源
wc.Dispose();  

PageUrl = UrlText.Text;
//根据指定的UR建立WEB请求
WebRequest  request = WebRequest.Create(PageUrl);
//定义对上面WEB请求的反应
WebResponse response = request.GetResponse();
//取得WEB响应的数据流
Stream resStream = response.GetResponseStream();
//根据上面定义的数据流,以默认编码的方式定义一个读数据流
StreamReader sr = new StreamReader(resStream, System.Text.Encoding.Default);
// 读取数据流中的内容
ContentHtml.Text = sr.ReadToEnd();
//关闭数据流
resStream.Close();
//关闭读数据流并释放资源
sr.Close();

NetBug–爬虫 V1.02开发笔记

背景

随着Internet的普及,网络信息正以极高的速度增长,在这么多数据中找到自己需要的信息是一件很繁琐的事情,找到需要的信息后如何获取也是件麻烦的事。这就需要Internet信息抓取程序来代替人工的操作。

所谓Internet信息抓取程序,就是程序会按照用户的关键词或关键网站来收集相应的信息,并提供给用户想要的信息格式。

信息量的增加会带来信息网站发布人员工作量的剧增,为实现信息发布系统实现信息自

动发布、减少工作人员工作量、即时跟踪最新信息,就需要自动信息提供程序,因此Internet信息抓取程序应运而生。

目标

实现自定义网站信息分类抓取,存入本地数据库、生成静态页面或其它用户定义的信息结构,并下载与信息相关的多媒体文件。

开发

l 目标站点结构分析

本步骤是准确抓取信息个关键。

首先要选择更新频率高的页面做为抓取地址,然后分析要抓取内容页面url特点。

然后分析要抓取信息页面的元素特性,比如标题位置,内容位置 等,得到定位标记点。

将以上信息写成自己的配置文件或存到数据库中。

每个网站都需要分析,写出单独的配置文件,供抓取程序使用。

l 信息提取

根据配置文件取得要抓取页面url,使用HttpWebRequest类获取内容:

//获取http页面函数

public string Get_Http(string a_strUrl,int timeout)

{

string strResult ;

try

{

HttpWebRequest myReq = (HttpWebRequest)HttpWebRequest.Create(a_strUrl) ;

myReq.Timeout = timeout;

HttpWebResponse HttpWResp = (HttpWebResponse)myReq.GetResponse();

Stream myStream = HttpWResp.GetResponseStream () ;

StreamReader sr = new StreamReader(myStream , Encoding.Default);

StringBuilder strBuilder = new StringBuilder();

while (-1 != sr.Peek())

{

strBuilder.Append(sr.ReadLine()+"\r\n");

}

strResult = strBuilder.ToString();

}

catch(Exception exp)

{

strResult = "错误:" + exp.Message ;

}

return strResult ;

}

获取页面内容后,分析页面中连接地址取到要抓取的url:

//处理页面标题和链接

public string SniffWebUrl( string urlStr,string blockB,string blockE )

{

string urlch1 = "";

string urlch2 = "";

int end_n1 = 0;

int end_nums = 0;

int end_nums1 = 0;

int end_nums2 = 0;

int end_nums3 = 0;

string reUTStr = "";

string reTitle = "";

string ret = "";

try

{

int pos01 = urlStr.IndexOf( "." );

int pos02 = urlStr.LastIndexOf( "/" );

if( pos01 < 0 )

{

return "";

}

if( pos02 < 0 )

{

return "";

}

int pos03 = urlStr.IndexOf( "/",pos01 );

if ( pos03 < 0 )

{

urlch1 = urlStr;

urlch2 = urlStr;

}

else

{

urlch1 = urlStr.Substring( 0,pos03 );

urlch2 = urlStr.Substring( 0,pos02 );

}

string tmpAllStr = new PublicFun().Get_Http( urlStr ,time1);

int pos1 = tmpAllStr.IndexOf( blockB );

int pos2 = tmpAllStr.IndexOf( blockE,pos1 + blockB.Length );

if ( pos1>0 && pos2>0 && pos2>pos1 )

{

ret = tmpAllStr.Substring( pos1 + blockB.Length,pos2 – pos1 – blockB.Length );

ret = ret.Substring( ret.IndexOf( "<" ));

while( ret.IndexOf( "<A" ) >= 0 )

{

ret = ret.Substring( 0,ret.IndexOf( "<A" ) ) + "<a" + ret.Substring( ret.IndexOf( "<A" ) + 2 );

}

while( ret.IndexOf( "</A" ) >=0 )

{

ret = ret.Substring( 0,ret.IndexOf( "</A" ) ) + "</a" + ret.Substring( ret.IndexOf( "</A" ) + 3 );

}

while( ret.IndexOf( "Href=" ) >=0 )

{

ret = ret.Substring( 0,ret.IndexOf( "Href=" )) + "href=" + ret.Substring( ret.IndexOf( "Href=" ) + 5 );

}

while( ret.IndexOf( "HREF=" ) >=0 )

{

ret = ret.Substring( 0,ret.IndexOf( "HREF=" )) + "href=" + ret.Substring( ret.IndexOf( "HREF=" ) + 5 );

}

while( ret.IndexOf( "href=’" ) >=0 )

{

ret = ret.Substring( 0,ret.IndexOf( "href=’" )) + "href=\"" + ret.Substring( ret.IndexOf( "href=’" ) + 6 );

}

}

tmpAllStr = ret;

int begin_nums = tmpAllStr.IndexOf( "href=" );

while ( begin_nums >= 0 )

{

string tmpStrA = "";

string tmpStrB = tmpAllStr.Substring( begin_nums + 5,1 );

if ( tmpStrB == "\"" )

{

end_n1 = begin_nums + 6;

if ( ( end_n1 + 1 ) > tmpAllStr.Length )

{

return "";

}

tmpStrA = tmpAllStr.Substring( begin_nums+6,1 );

}

else

{

end_n1 = begin_nums + 5;

tmpStrA = tmpStrB;

}

if ( tmpStrA == "#" )

{

tmpAllStr = tmpAllStr.Substring( end_n1 );

begin_nums = tmpAllStr.IndexOf( "href=" );

}

else

{

end_nums1 = tmpAllStr.IndexOf( " ",end_n1 );

end_nums2 = tmpAllStr.IndexOf( ">",end_n1 );

end_nums3 = tmpAllStr.IndexOf( "</a",end_nums2 );

if ( ( end_nums3 >= 0 ) && ( end_nums2 >= 0 ) )

{

reTitle = tmpAllStr.Substring( end_nums2 + 1,end_nums3 – end_nums2 – 1 );

if ( end_nums1 > end_nums2 )

{

end_nums = end_nums2;

}

else

{

if ( end_nums1 < 0 )

{

end_nums = end_nums2;

}

else

{

end_nums = end_nums1;

}

}

string str4 = tmpAllStr.Substring( end_nums-1, end_nums – end_nums + 1 );

if ( str4 =="\"" || str4 == "’" )

{

end_nums = end_nums – 1;

}

string sTotalOne = tmpAllStr.Substring( end_n1,end_nums – end_n1 );

if ( sTotalOne.IndexOf( "http://" ) <0 )

{

if ( sTotalOne.IndexOf( "/" ) == 0 )

{

sTotalOne = urlch1 + sTotalOne;

}

else

{

int linshiIntNum = 0;

int flags = 0;

string urlChange = urlStr;;

while( sTotalOne.IndexOf( "../" ) >= 0 )

{

sTotalOne = sTotalOne.Substring( sTotalOne.IndexOf( "../" ) + 3 );

linshiIntNum = linshiIntNum + 1;

flags = flags +1;

}

while( ( urlChange.LastIndexOf( "/" ) >= 0 ) && ( linshiIntNum >= 0 ) )

{

urlChange = urlChange.Substring( 0,urlChange.LastIndexOf( "/" ) );

linshiIntNum = linshiIntNum – 1;

}

if ( flags == 0 )

{

sTotalOne = urlch2 + "/" + sTotalOne;

}

else

{

sTotalOne = urlChange + "/" + sTotalOne;

}

}

}

reUTStr = reUTStr + new PublicFun().RemoveHtmlCode( reTitle ) + sTotalOne;

tmpAllStr = tmpAllStr.Substring( end_nums3 + 4 );

begin_nums = tmpAllStr.IndexOf( "href=" );

}

else

{

begin_nums = -1;

}

}

}

return reUTStr;

}

catch( Exception e)

{

return "";

}

}

得到要抓取内容的url后,处理该页面:

//获取链接内容并分类处理

public string GetWebContent( string gatherUrl,string subUrl,string subTitle,string b_Content,string e_Content,string b_Filter,string e_Filter,string root )

{

string tmpAllStr = "";

string dfStrB = "";

string dfStrE = "";

string rePicStr = "";//图片返回路径

string reContentStr = "";

string picHtml = "images"; //本地图片路径

string urlch1 ="";

string urlch2 ="";

int pos1 = gatherUrl.IndexOf( "." );

int pos2 = gatherUrl.LastIndexOf( "/" );

if( pos1 < 0 )

{

return "";

}

if( pos2 < 0 )

{

return "";

}

int pos3 = gatherUrl.IndexOf( "/",pos1 );

if ( pos3 < 0 )

{

urlch1 = gatherUrl;

urlch2 = gatherUrl;

}

else

{

urlch1 = gatherUrl.Substring( 0,pos3 );

urlch2 = gatherUrl.Substring( 0,pos2 );

}

tmpAllStr = new PublicFun().Get_Http( subUrl,time1 );

//取稿源

string docFromStr = "";

if ( dfStrB != "" && dfStrE != "" )

{

if ( tmpAllStr != "" )

{

int b_docF = tmpAllStr.IndexOf( dfStrB );

if ( b_docF > 0 )

{

int e_docF = tmpAllStr.IndexOf( dfStrE,b_docF + dfStrB.Length );

if ( e_docF > 0 && e_docF > b_docF && e_docF – b_docF < 20 )

{

docFromStr = tmpAllStr.Substring( b_docF + dfStrB.Length, e_docF – b_docF – dfStrB.Length );

}

}

}

}

//取内容

if ( tmpAllStr != "" )

{

int begin_strnum = tmpAllStr.IndexOf( b_Content );

if ( begin_strnum < 0 )

{

return "";

}

int end_strnum = tmpAllStr.IndexOf( e_Content,begin_strnum + b_Content.Length );

if ( end_strnum < 0 )

{

return "";

}

string sTotalSubM = "";

if ( end_strnum > begin_strnum )

{

sTotalSubM = tmpAllStr.Substring ( begin_strnum,end_strnum – begin_strnum );

}

if ( sTotalSubM == "" )

{

return "";

}

//过滤无用信息

int bfnum = sTotalSubM.IndexOf( b_Filter );

if ( bfnum > -1 )

{

int efnum = sTotalSubM.IndexOf( e_Filter,bfnum );

if ( efnum > -1 )

{

if ( efnum > bfnum )

{

sTotalSubM = sTotalSubM.Substring( 0,bfnum ) + sTotalSubM.Substring( efnum + e_Filter.Length );

}

}

}

//格式化图片标记

while( sTotalSubM.IndexOf( "Src=" ) >= 0 )

{

sTotalSubM = sTotalSubM.Substring( 0,sTotalSubM.IndexOf( "Src=" ) ) + "src=" + sTotalSubM.Substring( sTotalSubM.IndexOf( "Src=" ) + 4 );

}

while( sTotalSubM.IndexOf( "SRC=" ) >= 0 )

{

sTotalSubM = sTotalSubM.Substring( 0,sTotalSubM.IndexOf( "SRC=" ) ) + "src=" + sTotalSubM.Substring( sTotalSubM.IndexOf( "SRC=" ) + 4 );

}

while( sTotalSubM.IndexOf( "src=’" ) >= 0 )

{

sTotalSubM = sTotalSubM.Substring( 0,sTotalSubM.IndexOf( "src=’" ) ) + "src=\"" + sTotalSubM.Substring( sTotalSubM.IndexOf( "src=’" ) + 5 );

}

//取图片地址

int end_n12 = 0;

int end_nums2 = 0;

int begin_nums2 = sTotalSubM.IndexOf( "src=" );

while( begin_nums2 >= 0 )

{

String tmpStr = sTotalSubM.Substring( begin_nums2 + 4,1 );

if ( tmpStr == "\"" )

{

end_n12 = begin_nums2 + 5;

}

else

{

end_n12 = begin_nums2 + 4;

}

int end_nums2a = sTotalSubM.IndexOf( " ",end_n12 );

int end_nums2b = sTotalSubM.IndexOf( ">",end_n12 );

if ( end_nums2b < 0 )

{

break;

}

if ( end_nums2a > end_nums2b )

{

end_nums2 = end_nums2b;

}

else

{

if (end_nums2a<0)

{

end_nums2 = end_nums2b;

}

else

{

end_nums2 = end_nums2a;

}

}

tmpStr = sTotalSubM.Substring( end_nums2-1,1 );

if ( tmpStr == "\"" || tmpStr == "’" )

{

end_nums2 = end_nums2 – 1;

}

string tmpPicStr = sTotalSubM.Substring( end_n12,end_nums2 – end_n12 );

if ( tmpPicStr.IndexOf( "http://" ) < 0 )

{

if ( tmpPicStr.IndexOf( "/" ) == 0 )

{

tmpPicStr = urlch1 + tmpPicStr;

}

else

{

int linshiIntNum = 0;

int flags = 0;

string urlChange = subUrl;

while( tmpPicStr.IndexOf( "../" ) >= 0 )

{

tmpPicStr = tmpPicStr.Substring( tmpPicStr.IndexOf("../") + 3 );

linshiIntNum = linshiIntNum + 1;

flags = flags + 1;

}

while( ( urlChange.LastIndexOf( "/" ) >= 0 ) && ( linshiIntNum >= 0 ) )

{

urlChange = urlChange.Substring( 0,urlChange.LastIndexOf( "/" ) );

linshiIntNum = linshiIntNum – 1;

}

if ( flags == 0 )

{

tmpPicStr = urlch2 + "/" + tmpPicStr;

}

else

{

tmpPicStr = urlChange + "/" + tmpPicStr;

}

}

}

//tmpPicStr = tmpPicStr.ToLower();

string tmpPicStrTmp = tmpPicStr.ToLower();

//if ( tmpPicStr.IndexOf( ".jpg" ) > 0 || tmpPicStr.IndexOf( ".gif" ) > 0 || tmpPicStr.IndexOf( ".bmp" ) > 0 )

if ( tmpPicStrTmp.IndexOf( ".jpg" ) > 0 || tmpPicStrTmp.IndexOf( ".gif" ) > 0 || tmpPicStrTmp.IndexOf( ".bmp" ) > 0 )

{

rePicStr = rePicStr + "||" + tmpPicStr ;

int flagN2 = tmpPicStr.LastIndexOf( "/" );

string fileN2 = picHtml + tmpPicStr.Substring( flagN2 );

sTotalSubM = sTotalSubM.Substring( 0,end_nums2 ) + ">******" + fileN2 + "******<" + sTotalSubM.Substring( end_nums2 );

begin_nums2 = sTotalSubM.IndexOf( "src=", end_nums2 + fileN2.Length + 22 );

}

else

{

begin_nums2 = sTotalSubM.IndexOf( "src=", end_nums2 + 4 );

}

}

if ( rePicStr.Length > 2 )

rePicStr = rePicStr.Substring(2);

//内容处理 格式化关键标记

while( sTotalSubM.IndexOf( "<P" ) >= 0 )

{

sTotalSubM = sTotalSubM.Substring( 0,sTotalSubM.IndexOf( "<P" ) ) + "|****|<" + sTotalSubM.Substring( sTotalSubM.IndexOf( "<P" ) + 2 );

}

while( sTotalSubM.IndexOf( "<p" ) >= 0 )

{

sTotalSubM = sTotalSubM.Substring( 0,sTotalSubM.IndexOf( "<p" ) ) + "|****|<" + sTotalSubM.Substring( sTotalSubM.IndexOf( "<p" ) + 2 );

}

while( sTotalSubM.IndexOf( "</P" ) >= 0 )

{

sTotalSubM = sTotalSubM.Substring( 0,sTotalSubM.IndexOf( "</P" ) ) + "|****|<" + sTotalSubM.Substring( sTotalSubM.IndexOf( "</P" ) + 3 );

}

while( sTotalSubM.IndexOf( "</p" ) >= 0 )

{

sTotalSubM = sTotalSubM.Substring( 0,sTotalSubM.IndexOf( "</p" ) ) + "|****|<" + sTotalSubM.Substring( sTotalSubM.IndexOf( "</p" ) + 3 );

}

while( sTotalSubM.IndexOf( "<br" ) >=0 )

{

sTotalSubM = sTotalSubM.Substring( 0,sTotalSubM.IndexOf( "<br" ) ) + "+****+<" + sTotalSubM.Substring( sTotalSubM.IndexOf( "<br" ) + 3 );

}

while( sTotalSubM.IndexOf( "<BR" ) >= 0 )

{

sTotalSubM = sTotalSubM.Substring( 0,sTotalSubM.IndexOf( "<BR" ) ) + "+****+<" + sTotalSubM.Substring( sTotalSubM.IndexOf( "<BR" ) + 3 );

}

while( sTotalSubM.IndexOf( "<Br" ) >= 0 )

{

sTotalSubM = sTotalSubM.Substring( 0,sTotalSubM.IndexOf( "<Br" ) ) + "+****+<" + sTotalSubM.Substring( sTotalSubM.IndexOf( "<Br" ) + 3 );

}

while( sTotalSubM.IndexOf( "<bR" ) >= 0 )

{

sTotalSubM = sTotalSubM.Substring( 0,sTotalSubM.IndexOf( "<bR" ) ) + "+****+<" + sTotalSubM.Substring( sTotalSubM.IndexOf( "<bR" ) + 3 );

}

//去除html标记

int linshiInt1 = sTotalSubM.IndexOf( "<" );

int linshiInt2 = sTotalSubM.IndexOf( ">" );

if ( linshiInt2 < linshiInt1 )

{

sTotalSubM = sTotalSubM.Substring( linshiInt2 + 1 );

}

int linshiInt11 = sTotalSubM.LastIndexOf( "<" );

int linshiInt12 = sTotalSubM.LastIndexOf( ">" );

if ( linshiInt12 < linshiInt11 )

{

sTotalSubM = sTotalSubM.Substring( 0,linshiInt12 + 1 );

}

linshiInt1 = sTotalSubM.IndexOf( "<" );

while ( linshiInt1 >= 0 )

{

linshiInt2 = sTotalSubM.IndexOf( ">",linshiInt1 );

if ( linshiInt2 >= 0 )

{

sTotalSubM = sTotalSubM.Substring( 0,linshiInt1 ) + sTotalSubM.Substring( linshiInt2 + 1 );

}

else

{

sTotalSubM = sTotalSubM.Substring( 0,linshiInt1 );

}

linshiInt1 = sTotalSubM.IndexOf("<");

}

//还原关键标记

int linshiInt3 = 0;

int linshiInt4 = 0;

while( sTotalSubM.IndexOf( "+****+" ) >= 0 )

{

sTotalSubM = sTotalSubM.Substring( 0,sTotalSubM.IndexOf( "+****+" ) ) + "<br>\n" + sTotalSubM.Substring( sTotalSubM.IndexOf( "+****+" ) + 9 );

}

while( sTotalSubM.IndexOf( "|****|" ) >= 0 )

{

sTotalSubM = sTotalSubM.Substring( 0,sTotalSubM.IndexOf( "|****|" ) ) + "<br>\n" + sTotalSubM.Substring( sTotalSubM.IndexOf( "|****|" ) + 9 );

}

while( sTotalSubM.IndexOf( "******" ) >= 0 )

{

linshiInt3 = sTotalSubM.IndexOf( "******" ) + 9;

linshiInt4 = sTotalSubM.IndexOf( "******",linshiInt3 );

if ( linshiInt4 >= 0 )

{

int tmpPos = sTotalSubM.IndexOf( "******" );

string tmpStr1 = sTotalSubM.Substring( 0,tmpPos );

string tmpStr2 = sTotalSubM.Substring( linshiInt3,linshiInt4 – linshiInt3 );

string tmpStr3 = sTotalSubM.Substring( linshiInt4 + 9 );

sTotalSubM = tmpStr1 + "<img src=" + tmpStr2 + ">" + tmpStr3;

}

else

{

break;

}

}

//去除内容中的标题

if ( sTotalSubM.IndexOf( subTitle ) >= 0 )

{

sTotalSubM = sTotalSubM.Substring( 0,sTotalSubM.IndexOf( subTitle ) ) + sTotalSubM.Substring( sTotalSubM.IndexOf( subTitle ) + subTitle.Length );

}

reContentStr = sTotalSubM;

//调用下载图片功能

//下载图片到指定目录

string[] img_Url = new PublicFun().split( rePicStr,"||" );

for ( int i=0;i<img_Url.Length;i++ )

{

if ( img_Url[i] != "" )

{

new PublicFun().Get_Img( img_Url[i],10000,root + "\\images\\" + img_Url[i].Substring( img_Url[i].LastIndexOf("/")+1 ) );

}

}

}

return reContentStr;

}

以上方法返回要取得的信息,包括标题内容,图片地址等。

下载页面中图片:

//下载图片

public void Get_Img(string a_strUrl,int timeout,string filepath)

{

try

{

HttpWebRequest myReq = (HttpWebRequest)HttpWebRequest.Create(a_strUrl) ;

myReq.Timeout = timeout;

HttpWebResponse HttpWResp = (HttpWebResponse)myReq.GetResponse();

Stream myStream = HttpWResp.GetResponseStream () ;

Bitmap map = new Bitmap( myStream );

PictureBox picB = new PictureBox();

picB.Image = (Image)map;

string path = filepath.Substring( 0,filepath.LastIndexOf( "\\" ) );

if (!Directory.Exists(path))

{

CreateDir( path );

}

picB.Image.Save(filepath);

}

catch(Exception exp)

{

string ss = exp.Message;

WriteLog( filepath.Substring(0,filepath.LastIndexOf("\\")) + "\\error.log",a_strUrl + "–" + ss + "\r\n");

}

}

l 保存文件或入库

上面取得的信息可以按自己的要求保存。

****设计的时候没有使用url按层次循环抓取,这样定义抓取url效率更高,速度更快。

测试程序下载:http://bjfile.focus.cn/file/15379/NetBugV102.rar

如有建议请发送EMail:xiancai@qianlong.com 或msn yutao728@hotmail.com

注:此版本只提供静态文件存储功能,不提供数据库接口,不提供自定义网站功能。

本程序运行需要先安装.net 框架1.1。

2006年09月10日
你是否因为自己的好奇心点击了你的网站上的广告而被迫退出Google Adsense 计划,你是否因为有热心的网友帮助你疯狂的点击广告而导致你被Google Adsense 关闭账户,你是否不小心在你网站的注册页面登录页面放上了广告而同样被Google Adsense 关闭账户,或者其它的导致你被Google Adsense 关闭账户的情况?如果有,看完本文应该可以给你一定帮助。
  我很不幸,以上情况我全部遇到了,从因为好奇点击到莫名关闭,我一共经历了三次账户关闭情况,很郁闷,每一次都有将近30美元的广告费,再加上有人因为点击欺诈将Google告上法庭,我彻底的对Google Adsense死心了,这个我找到了Zanox!
  Zanox是一家来自德国的广告服务商,它的广告主都是一些跨国大公司,例如宝洁(Procter & Gamble),Jamba!,沃达丰(Vodafone),O2,Lycos,Expedia,安联(Allianz),花旗银行(Citibank),安盛(Axa),Sixt,戴姆勒克莱斯勒(DaimlerChrysler)客万乐(Quelle) 和 Staples,还有Dell和联想!
  Zanox的广告方式和Google Adsense不同,不是根据网页相关性自动输出广告,而是相当如一个广告超市,各大企业发布广告合约,由站长自行选择广告商申请合约,合约的申请是直接针对广告商的,合约申请通过后由广告商直接将广告费付给站长,这一点很让人放心!
  通过Zanox发布广告的流程是这样的!首先要注册一个账号,点击这里注册。由于是中文界面,所以注册对大家来说是没有任何问题的!注册成功后你会收到一封确认邮件,[color=Red]点击邮件里面的确认链接[/color],就算正式注册成功了!
  然后你可以通过邮件中的链接登录网站申请广告合约了。登录后,点击网站菜单“项目管理员”,然后点“项目搜索”或者“项目目录”进行合约选择,找到合适的合约,直接点击“给申请”

  [color=Red]如果看到“[/color][color=LimeGreen]你符合所有申请条件[/color][color=Red]”,那么恭喜你,你基本可以通过申请了[/color]

  [color=Red]在打开的页面的底部,钩选“我已经阅读并接受zanox和Shop@CN – your personal shopping portal的条款。”,然后点击“申请”按钮,就完成了申请了,如果你的合约通过,你会收到通知邮件,你就可以开始发布这个合约的广告了![/color]

  [color=Red]在“我的项目”可以查看你申请的合约的情况,比如获取代码、查看统计情况,佣金(广告费)比例,计费方式等,通过与否等等。如果代码链接是灰的不可点,就说明申请还没有通过,只有在等等啦![/color]

  [color=Red]点击“代码”打开当前项目的广告类型列表,再点击“代码”,获取具体的广告显示代码。[/color]

  [color=Red][b]Zanox还有一个非常棒的功能–AdServer–广告服务器,它可以把你申请的全部项目的同规格广告形式进行轮流展示,这样就可以节省对网页空间的占用,而能显示更多的广告内容,确实非常方便,效果可以参加本页顶部!
  点击“建立新的广告服务器”,可以看到下面的界面,可按下图设置好参数,广告服务器服务类型只能选择“AdMedia rotation”。[/b][/color]

  [color=Red]然后点表格下部右边的“继续”,选择你申请的项目。[/color]

  [color=Red]再点表格下部右边的“继续”,系统自动列出所有选定项目符合条件的广告类型,选择你要展示的广告。[/color]

  [color=Red]选好后点“继续”来到广告单元设置页面,进行各广告单元展示时间的设置,这就完成了整个广告服务器的设置了。[/color]

  [color=Red]点击“完成”来到广告服务器列表页面,点击“代码”就可以获得广告代码,将它放到你的网站或邮件中就可以开始获取广告收入了!当然也可以对已有的广告服务进行修改。[/color]

  最后希望广大在Google Adsense 被没收广告费的站长们,能通过Zanox这个各大公司信赖的广告公司挣到更多的广告费,到时记得给我赞助一点哦!现在就加入Zanox吧,点击开始新的广告历程
 
 

http://lividot.org/man/ 这个目录下有一些很不错的文档,大家来看看有没有自己需要的?

如果你希望自己成为一个更加专业的 geek,那我建议你把上面的所有文档都通读一遍,必定收获巨大。

关于制造中文 Web 阅读体验过程中的一些思考结论。
正文字体的尺寸应该使用固定的偶数像素单位,如 12px,14px,16px 等,一个例外情况就是 15px 像素也是相当不错的正文字体的尺寸。由于中文 Windows 操作系统及部分的 Linux 发行版使用的是像素字库,因此,这几个尺寸的字体在显示效果上最佳。而在 Mac OS X 上,因为 Mac OS X 使用的是矢量字库,则在各种尺寸下显示效果都不错。另外就是,Mac OS X 的中文矢量字库中内嵌了 12px 的像素字库。
blockquote、ol、ul 等 HTML 元素内的文字应该在顶端和尾端留出至少 10px 的空白,在左端留出 20px 左右的空白,右端 10px 左右。在 CSS 语法中这些空白应该使用 margin 方式设置,padding 方式不提倡使用。padding 可以用来实现其他视觉效果。
不要随意在正文和标题中使用拉丁等宽字体,除非是为了一些艺术上的用意。拉丁等宽字体应该用在和模拟打印制品或者程序源代码有关的场合。
不要在任何地方强制指定使用任何的艺术中文字体,比如“魏碑”之类,这将在超过一半以上的计算机上,尤其是非 Windows 操作系统的计算机上不会显示出任何效果。
应该对大部分文字的 line-height 属性进行强制指定,一个经验是,对于正文文字,line-height 数值可以指定为这些文字的 font-size 的像素值的 1.6 倍左右。如果是标题文字的话,1.3 倍左右。
中文正文及标题中出现的标点符号应该使用全角方式输入。
中文正文及标题中出现的英文及数字应该使用半角方式输入,并且在左右各留一个半角空格。如果这些这些半角英文及数字的左边或者右边紧接着任何的中文全角括号或者其他标点符号的话,则不需要加入半角空格。
中文全角空格应该只在标题处使用。此外,在 Web 上的文字的正文的段落开头是否使用两个全角空格是个人喜好问题,反正我不喜欢用,因为这些全角空格有些浪费存储空间,且对快速扫描式的阅读没有太大帮助。
在 Web 上的文字,是被人们用眼睛来扫描的,绝大部分都不会被人仔细阅读。
中文字体的粗体和斜体显示效果不推荐使用。在大部分非 Windows 操作系统上,这些效果都不被字库或者浏览器支持。而在 Windows 操作系统上,这些效果也不够理想。粗体中文显示效果在 Windows 操作系统上会让部分笔画连接在一起而使得文字难以被辨认,而斜体中文显示效果则会使得部分笔画消失,也非常难以被辨认。如果一定要使用此二种效果,则要么通过 CSS 的 font-weight 方式指定,要么通过 strong 和 em 标签,而不要使用 b 和 i 标签。
中文的段落与段落之间应该留出一个完整的空行。即每个段落使用一对闭合的 p 标签在不加 CSS 时候的效果,或者是使用两个 br 标签时产生的效果。注意,这个空行的高度会受到 line-height 的影响,因此不要把 line-height 设置为太高的数值,否则将使得两个段落之前的视觉联系减弱,导致影响阅读时候的思路连贯。
如果文字是要被通过 RSS 输出的,则可以考虑在其中加入一份内嵌样式表,对于 ol、ul、blockquote 等元素的样式尤其需要控制。这样可以保证即使文字被显示在其他网站,其样式也依然可以保持统一,如果没有被聚合器过滤 HTML 标签的话。
以上这些,是我在写任何 HTML 文档时候的指导原则。比如,V2EX 的所有文档及 UBB 转换器都尽量符合这些原则。 

2006年09月07日

1、DateTime 数字型
System.DateTime currentTime=new System.DateTime();
1.1 取当前年月日时分秒
currentTime=System.DateTime.Now;
1.2 取当前年
int 年=currentTime.Year;
1.3 取当前月
int 月=currentTime.Month;
1.4 取当前日
int 日=currentTime.Day;
1.5 取当前时
int 时=currentTime.Hour;
1.6 取当前分
int 分=currentTime.Minute;
1.7 取当前秒
int 秒=currentTime.Second;
1.8 取当前毫秒
int 毫秒=currentTime.Millisecond;
(变量可用中文)

1.9 取中文日期显示——年月日时分
string strY=currentTime.ToString("f"); //不显示秒

1.10 取中文日期显示_年月
string strYM=currentTime.ToString("y");

1.11 取中文日期显示_月日
string strMD=currentTime.ToString("m");

1.12 取当前年月日,格式为:2003-9-23
string strYMD=currentTime.ToString("d");

1.13 取当前时分,格式为:14:24
string strT=currentTime.ToString("t");

2、Int32.Parse(变量) Int32.Parse("常量")
字符型转换 转为32位数字型

3、 变量.ToString()
字符型转换 转为字符串
12345.ToString("n"); //生成 12,345.00
12345.ToString("C"); //生成 ¥12,345.00
12345.ToString("e"); //生成 1.234500e+004
12345.ToString("f4"); //生成 12345.0000
12345.ToString("x"); //生成 3039 (16进制)
12345.ToString("p"); //生成 1,234,500.00%

4、变量.Length 数字型
取字串长度:
如: string str="中国";
int Len = str.Length ; //Len是自定义变量, str是求测的字串的变量名

5、System.Text.Encoding.Default.GetBytes(变量)
字码转换 转为比特码
如:byte[] bytStr = System.Text.Encoding.Default.GetBytes(str);
然后可得到比特长度:
len = bytStr.Length;

6、System.Text.StringBuilder("")
字符串相加,(+号是不是也一样?)
如:System.Text.StringBuilder sb = new System.Text.StringBuilder("");
sb.Append("中华");
sb.Append("人民");
sb.Append("共和国");

7、变量.Substring(参数1,参数2);
截取字串的一部分,参数1为左起始位数,参数2为截取几位。
如:string s1 = str.Substring(0,2);

8、String user_IP=Request.ServerVariables["REMOTE_ADDR"].ToString();
取远程用户IP地址

9、穿过代理服务器取远程用户真实IP地址:
if(Request.ServerVariables["HTTP_VIA"]!=null){
string user_IP=Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString();
}else{
string user_IP=Request.ServerVariables["REMOTE_ADDR"].ToString();
}

10、 Session["变量"];
存取Session值;
如,赋值: Session["username"]="小布什";

取值: Object objName=Session["username"];
String strName=objName.ToString();
清空: Session.RemoveAll();

11、String str=Request.QueryString["变量"];
用超链接传送变量。
如在任一页中建超链接:<a href=Edit.aspx?fbid=23>点击</a>
在Edit.aspx页中取值:String str=Request.QueryString["fdid"];

12、DOC对象.CreateElement("新建节点名");
创建XML文档新节点

13、父节点.AppendChild(子节点);
将新建的子节点加到XML文档父节点下

14、 父节点.RemoveChild(节点);
删除节点

15、Response
Response.Write("字串");
Response.Write(变量);
向页面输出。

Response.Redirect("URL地址");
跳转到URL指定的页面

16、char.IsWhiteSpce(字串变量,位数)——逻辑型
查指定位置是否空字符;
如:
string str="中国 人民";
Response.Write(char.IsWhiteSpace(str,2)); //结果为:True, 第一个字符是0位,2是第三个字符。

17、char.IsPunctuation(‘字符’) –逻辑型
查字符是否是标点符号
如:Response.Write(char.IsPunctuation(‘A’)); //返回:False

18、(int)’字符’
把字符转为数字,查代码点,注意是单引号。
如:
Response.Write((int)’中’); //结果为中字的代码:20013

19、(char)代码
把数字转为字符,查代码代表的字符。
如:
Response.Write((char)22269); //返回“国”字。

20、 Trim()
清除字串前后空格

21 、字串变量.Replace("子字串","替换为")
字串替换
如:
string str="中国";
str=str.Replace("国","央"); //将国字换为央字
Response.Write(str); //输出结果为“中央”

再如:(这个非常实用)

string str="这是<script>脚本";
str=str.Replace("<","<font><</font>"); //将左尖括号替换为<font> 与 < 与 </font> (或换为<,但估计经XML存诸后,再提出仍会还原)
Response.Write(str); //显示为:“这是<script>脚本”

如果不替换,<script>将不显示,如果是一段脚本,将运行;而替换后,脚本将不运行。
这段代码的价值在于:你可以让一个文本中的所有HTML标签失效,全部显示出来,保护你的具有交互性的站点。
具体实现:将你的表单提交按钮脚本加上下面代码:
string strSubmit=label1.Text; //label1是你让用户提交数据的控件ID。
strSubmit=strSubmit.Replace("<","<font><</font>");
然后保存或输出strSubmit。
用此方法还可以简单实现UBB代码。

22、Math.Max(i,j)
取i与j中的最大值
如 int x=Math.Max(5,10); // x将取值 10

23、字串对比一般都用: if(str1==str2){ } , 但还有别的方法:

(1)、
string str1; str2
//语法: str1.EndsWith(str2); __检测字串str1是否以字串str2结尾,返回布尔值.如:
if(str1.EndsWith(str2)){ Response.Write("字串str1是以"+str2+"结束的"); }

(2)、
//语法:str1.Equals(str2); __检测字串str1是否与字串str2相等,返回布尔值,用法同上.

(3)、
//语法 Equals(str1,str2); __检测字串str1是否与字串str2相等,返回布尔值,用法同上.

24、IndexOf() 、LastIndexOf()
查找字串中指定字符或字串首次(最后一次)出现的位置,返回索引值,如:
str1.IndexOf("字"); //查找“字”在str1中的索引值(位置)
str1.IndexOf("字串");//查找“字串”的第一个字符在str1中的索引值(位置)
str1.IndexOf("字串",3,2);//从str1第4个字符起,查找2个字符,查找“字串”的第一个字符在str1中的索引值(位置)

25、Insert()
在字串中指定索引位插入指定字符。如:
str1.Insert(1,"字");在str1的第二个字符处插入“字”,如果str1="中国",插入后为“中字国”;

26、PadLeft()、PadRight()
在字串左(或右)加空格或指定char字符,使字串达到指定长度,如:
<%
string str1="中国人";
str1=str1.PadLeft(10,’1′); //无第二参数为加空格
Response.Write(str1); //结果为“1111111中国人” , 字串长为10
%>

27、Remove()
从指定位置开始删除指定数的字符
字串对比一般都用: if(str1==str2){ } , 但还有别的方法:

1、
string str1; str2
//语法: str1.EndsWith(str2); __检测字串str1是否以字串str2结尾,返回布尔值.如:
if(str1.EndsWith(str2)){ Response.Write("字串str1是以"+str2+"结束的"); }

2、
//语法:str1.Equals(str2); __检测字串str1是否与字串str2相等,返回布尔值,用法同上.

3、
//语法 Equals(str1,str2); __检测字串str1是否与字串str2相等,返回布尔值,用法同上.

28、IndexOf()
查找字串中指定字符或字串首次出现的位置,返首索引值,如:
str1.IndexOf("字"); //查找“字”在str1中的索引值(位置)
str1.IndexOf("字串");//查找“字串”的第一个字符在str1中的索引值(位置)
str1.IndexOf("字串",3,2);//从str1第4个字符起,查找2个字符,查找“字串”的第一个字符在str1中的索引值(位置)