09-07-2013 0 条评论

其实盖子已经开发了一个功能更强大的版本,但是那个版本依然基于正方系统,也就是说只要正方系统跪了或者张院士在网站上做点手脚,这个小工具就会失效。

今天给大家的版本虽然功能及其简单、界面极端丑陋,但是通过课程助理的接口,无需通过正方系统,直接获取大家的成绩。

你只要提供你的学号和生日即可查询成绩,简单快速。

绿色程序,需要.net framwork 2.0支持,没有环境的同学可以在这里下载:http://search.microsoft.com/zh-cn/DownloadResults.aspx?q=Microsoft+.NET+Framework+2.0

课程助理:http://pan.baidu.com/share/link?shareid=933945023&uk=3976574500

最后,课程助理 For iOS已经在App Store上架,欢迎下载:https://itunes.apple.com/cn/app/id659541624?mt=8

16-05-2013 1 条评论

本文的前提是你已经熟悉Json,如果您还不知道什么是Json是什么,请自行查看维基百科

一、Json.Net是什么?

  Json.Net是一个读写Json效率比较高的.Net框架.Json.Net 使得在.Net环境下使用Json更加简单。通过Linq To JSON可以快速的读写Json,通过JsonSerializer可以序列化你的.Net对象。让你轻松实现.Net中所有类型(对象,基本数据类型等)和Json的转换。

  点击下载

二、为什么使用Json.Net?

我们知道在.Net中内置了读写Json的对象(DataContractJsonSerializer,JavaScriptSerializer),为什么我们还要用Json.Net呢?

在功能上:

特性 Json.Net DataContractJsonSerializer JavaScriptSerializer
Json 支持 支持 支持
Bson 支持 不支持 不支持
Json Schema 支持 不支持 不支持
.Net 2.0 支持 不支持 不支持
.Net 3.5 支持 支持 支持
.Net 4.0 支持 支持 支持
Silverlight 支持 支持 不支持
Windows Phone 支持 支持 不支持
Windows 8 Metro 支持 支持 不支持
Linq to Json 支持 不支持 不支持
Indented Json(有换行格式的Json) 支持 不支持 不支持
Json和XML转换 支持 不支持 不支持
序列化DataTable和DataSet 支持 不支持 不支持
序列化Entity Framework 支持 不支持 不支持

在性能上:

三、简单实例

以下就json常用的方法给大家做一个简单的例子:

JavaScriptConvert.SerializeObject:将对象转换为josn字符串

 Productproduct =newProduct();


product.Name ="Apple";
product.Expiry =newDateTime(2008, 12, 28);
product.Price = 3.99M;
product.Sizes =newstring[] {"Small","Medium","Large"};
string json = JavaScriptConvert.SerializeObject(product);

Newtonsoft.Json.JavaScriptConvert.DeserializeObject:根据json字符串反序列化得到对象。

ProductdeserializedProduct = (Product)JavaScriptConvert.DeserializeObject(output,typeof(Product));

其中的output就是一个json字符串,而product是要反序列化的类对象
通过这两个常用的方法,就可以很方便的从json字符串得到对象和从对象得到json字符串。

13-05-2013 0 条评论

SB的南京某大学居然校园网又限速又流量,所以为了方便大家下载,特此提供离线安装包。

百度网盘:http://pan.baidu.com/share/link?shareid=388063&uk=941708466

校园网地址:http://download.njut.asia/vs2012_update2_package.7z

Visual Studio 2012 Update 2

Visual Studio更新版本2(Visual Studio 2012.2)是Visual Studio 最新的更新版本,提供一系列功能的增强与错误的修正。此外,更新版本2也包含了所有在之前 更新版本1之中所提供的功能。为了实现Visual
Studio产品的持续改进承诺,这次的更新包含了所有的版本,并且还针对旗舰版与企业版提供了有关软件开发生命周期管理的许多新功能。在更新版本2所包含的新功能主要针对以下四个关键领域:

  • 敏捷项目计划
  • 质量提升
  • 关键企业应用(Line Of Business)开发
  • 改善开发体验

敏捷项目计划

Visual Studio 2012引进了一系列的功能以助力团队实现敏捷开发。更新版本2更增加了许多新功能让您的团队可以定制化您所真正需要的敏捷开发过程工具。您现在可以在广告牌(Kanban)中新增定制化的栏位,以精确的反应您的组织架构。工作项目标签(Tag)功能可以帮助团队以新增标签的方式,更好的管理工作项目。

质量提升

Visual Studio 2012其中一项关键的价值就是在软件开发生命周期中,保障开发的质量。在更新版本2中,您可以使用网页工具进行测试用例管理,以持续不断的提高质量。您可以从远端发布或执行测试用例,让整个团队更容易的参与测试用例的检视。您还可以端到端的追踪您的代码,剖析您的单元测试以提高代码的质量,即使包括单元测试本身。

关键企业应用(Line Of Business)开发

在更新版本2中,我们持续投入在关键企业应用(Line Of Business)开发方面的改进。您可以使用LightSwitch快速的建立SharePoint应用与HTML5的客户端应用。您只需专注在应用的设计,让LightSwitch的范本帮助您更快的完成,这样您的企业关键应用程序就能够更快的执行。随着Visual Studio所提供的WPF、Silverlight与Blend SketchFlow的设计工具 ,现在您可以设计并编程出任何您所想要桌面应用程序。

改善开发体验

当您花费了大量的时间在软件开发,您一定期望您所使用的工具能提供令人愉悦的开发体验。更新版本2提供一系列对开发体验的改善与强化。代码地图除错集成(Code Map Debugger Integration)提供更视觉化的方式,帮助您在除错时更快的发现错误所在。您也可以使用增强的分析功能建立更好的Windows Store应用程序,及早发现错误,以免对您的用户造成影响。

KB2797912:
Visual Studio 2012 更新 2 的说明

其他更新

Visual Studio 2012 Update 2(Visual Studio 2012.2)还提供了其他的更新:

08-04-2013 0 条评论

下载地址:http://pan.baidu.com/share/link?shareid=400900&uk=639894609

08-03-2013 0 条评论

数据库:MySQL

平台:.net framework 2.0 (C#)

组建:Winista.Text.HtmlParser

演示页面:2013年3月7日南京市各区县农贸市场主副食品价格对比表  http://www.njprice.com/col71/col464/articleinfo.php?infoid=44181

2013年2月28日南京市各区县农贸市场主副食品价格对比表   http://www.njprice.com/col71/col464/articleinfo.php?infoid=44079

以及所有其他日期发布的《南京市各区县农贸市场主副食品价格对比表》

using System;
using System.Collections.Generic;
using System.Text;
using nanjing_price.WebUtility;
using Winista.Text.HtmlParser;
using Winista.Text.HtmlParser.Lex;
using Winista.Text.HtmlParser.Util;
using Winista.Text.HtmlParser.Tags;
using Winista.Text.HtmlParser.Filters;
using org.nutlab;

namespace nanjing_price.Fuction
{
    class NanjingMain
    {
        string content;
        string urlStr;

        public NanjingMain(string url)
        {
            this.urlStr = url;
            getContent();
            inputDB();
        }

        void getContent()
        {
            webUtility web = new webUtility();
            content = Tools.filterScript(web.getContent(urlStr));
        }

        void inputDB()
        {
            DateTime publishTime = new DateTime();
            good_price price = new good_price();
            Parser parser = Parser.CreateParser(Tools.filterTableAttribute(content.Replace(System.Environment.NewLine, "")), "gb2312");
            NodeFilter table = new TagNameFilter("table");
            INode Table = parser.Parse(table)[2].Children[3];
            parser = Parser.CreateParser(Table.ToHtml(), "gb2312");
            Table = parser.Parse(table)[3];
            parser = Parser.CreateParser(Table.ToHtml(), "gb2312");
            Table = parser.Parse(table)[2];
            Console.WriteLine(Table.ToHtml());
            INode tempTag = Table;
            TableTag tableTag = (TableTag)tempTag;//上面判断如果得到的第一个为table 
            Winista.Text.HtmlParser.Tags.TableRow[] tr = tableTag.Rows;//得到该table所有的tr
            TableColumn[] tc = tr[2].Columns;
            publishTime = Convert.ToDateTime(tc[0].ToPlainTextString().Trim().Substring(3));
            Console.WriteLine(publishTime);
            for (int i = 6; i < tr.Length; i++)
            {
                tc = tr[i].Columns;
                for (int j = 3; j < tc.Length; j++)
                {
                    price.name = tc[0].ToPlainTextString().Trim();
                    price.standard = tc[1].ToPlainTextString().Trim();
                    price.unit = tc[2].ToPlainTextString().Trim();
                    price.district_name = tr[4].Columns[j].ToPlainTextString().Trim();
                    price.market_name = tr[5].Columns[j].ToPlainTextString().Trim();
                    price.amount = tc[j].ToPlainTextString().Trim();
                    price.publish_time = publishTime;
                    price.get_time = System.DateTime.Now;
                    price.get_url = urlStr;
                    price.Add();
                }
            }
        }

    }
}

源代码下载:点击下载

SVN: Google Code

31-10-2012 0 条评论

每次说到ASP.NET就会有人说,这是微软的,不开放的,要收钱的,不能在Linux下部署。当然,我想去反驳他,但是我想要指出的是ASP.NET是可以支持Linux,ASP.NET无法构建大规模的项目很大程度也是受限于Windows Server和IIS(其实ASP.NET完成了很多大项目,比如微软所有的网站、MySpace、京东、当当,这些都是访问量巨大的网站,有些都是排民全球前十的)。

好了,吐槽完,我们言归正传,考试讲解在Linux下部署ASP.NET项目。

一、环境介绍

首先,我们来了认识一下Linux下不是ASP.NET需要用到核心组件Jexus。

Jexus web server for linux 是一款基于.NET兼容环境,运行于Linux/unix操作系统之上,以支持ASP.NET为核心功能的高性能WEB服务器。 
Jexus V5.1有如下功能特点: 
01、支持ASP.NET。这是Jexus的核心功能。无论是稳定性、易用性还是并发承载能力、并行处理速度,Jexus对ASP.NET的支持都是非常优秀的; 
02、支持Fast-CGI。通Fast-CGI,Jexus能支持包括PHP在内的所有拥有Fast-CGI服务功能的WEB应用; 
03、具备基于正则表达式的强大的URL重写功能; 
04、具有强劲的反向代理功能。支持多目标负载均衡,支持本地网站与远程网站无缝整合; 
05、拥有强大的流媒体支持能力,支持FLV/F4V视频文件拖动播放,支持微软平滑流媒体技术; 
06、支持“服务器推送”技术,配备了相应的服务器端、客户端开发接口,是开发现代WEB应用的利器; 
07、具备可控的“ASP.NET前置缓存”,能最大限度地提高ASP.NET网站的承载能力和响应速度; 
08、支持Https,具有SSL加密数据安全传输能力; 
09、具有基础而实用的入侵检测功能,能自动终止已被识别的非法请求; 
10、安装部署非常简便,操作使用极为简单。

二、安装前的准备工作:

1、系统已经安装好mono 2.10.8 或更高版本,至于如何在linux上安装mono,请参考www.linuxdot.net上的相关文章。
2、请确认Linux系统中存在 libc.so.6、libdl.so.2两个库文件,如果需要启用https,系统中还需要具备libssl.so.x.x.x库文件,比如libssl.so.0.9.8,如果没有,请安装OpenSSH。


三、下载并解压Jexus安装包: 
1、下载:
地址:http://www.linuxdot.net/down/jexus-5.1.tar.gz,可以用wget下载,如:wget http://www.linuxdot.net/down/jexus-5.1.tar.gz

2、解压:
tar -zxvf jexus-5.1.tar.gz

3、安装:
Jexus安装非常简单,仅仅就是一个复制、粘帖和注册全局程序集的过程,但要特别注意:需要用root身份进行操作。
A、复制文件,建议把jexus安装到/usr/jexus中:
sudo cp -rf jexus-5.1 /usr/jexus
B、注册全局程序集:
cd /usr/jexus
sudo ./jws.regsvr
C、请查看 jws.start、jws.stop、jws.restart、jws.regsvr这几个脚本文件的权限,确定是否具有可执行权限。


四、运行测试 
    复制完Jexus的文件后,Jexus就可以正常工作了,甚至连进一步的配置也完全不需要。
    强调:如果你服务器安装有其它的WEB服务器,而且该服务正在运行,请停止它,以免造成端口冲突而造成Jexus无法启动。

    如果是最新安装,请首先建立一个默认的网站文件夹:/var/www/default,并在里面放一个首页文件,如index.htm或default.htm
    进入jexus工作文件夹,启动jexus,命令如下:
    cd /usr/jexus
    sudo ./jws.start
    启动后,请尝试访问一下这个网站,看看是否能看到你放的首页或者jexus的欢迎页,网址是:“http://服务器IP地址”或者“http://服务器IP地址/info”。


五、Jexus 系统配置 
Jexus按默认配置就能很好的工作,进一步配置是为了Jexus更适合自己的需要。
Jexus最核心的一个配置文件,固定文件名是jws.conf,这个文件与jexus的其它工作文件在同一个文件夹中。
jws.conf有如果基本配置内容:

SiteLogDir=log    #网站日志以及Jexus系统日志的存放位置,必填项。可以使用基于jws.exe文件的相对路径
SiteConfigDir=siteconf     #网站配置文件存放的位置,是必填项。可以使用绝对路径,也可以使用基于jws.conf文件的相对路径
Runtime=v4.0.30319    #设定Jexus工作进程运行于哪个.NET版本
httpd.processes=1     #工作进程的数量,建议每6-8核CPU用一个进程,最多可设4个进程
httpd.user=www-data     #工作进程以什么用户身份和对应权限工作,默认为root
php-fcgi.set=/usr/bin/php-cgi,6    #如果需要Jexus同时充当PHP FastCGI服务器,这一句就是fast-cgi设置,分两个部分,逗号前为php-cgi这个文件的路径,逗号后是php进程数
CertificateFile=/xxxx/xx.crt    #SSL证书路径(如果需要使用https协议才填)
CertificateKeyFile=/xxxx/xx.key    #SSL密钥文件路径(如果需要使用https协议才填)

注:jws.conf 中,SiteConfigDir 和 SiteLogDir 两项是必填项。


六、网站配置

Jexus支持多站点,可以用不同的端口、域名、虚拟路径设置任意多的网站,配置时,首先要注意如下三个规则:
1)必须把所有网站配置文件放到jws.conf指定的网站配置文件夹内,这个文件夹除了网站配置文件,不能有其它任何文件,因为jexus会认为这儿的任何一个文件都代表着一个不同的网站。
2)每个网站有且只有一个配置文件,配置文件的文件名就是这个网站的名称,比如 www.mysite.cn这个网站,配置文件名可以写成“mysite”,当然也可以写成其它文件名,以便管理员容易记忆和识别,但要特别注意:文件名不能有空格!
3)一个网站可以拥有任意多的域名,不同网站不能有相同的域名,没有域名的网站只能有一个,这个没有域名的网站叫做“默认网站”,而一台服务器最多只能有一个默认网站。


下面以www.mysite.cn为例,说说网站的配置
在网站配置文件夹中建立一个文件,这个文件的名称应该有一些意义(至少要能让服务器管理员了解这个配置文件是属于哪一个网站的)
设这个网站的配置文件的文件名为:mysite

sudo miv mysite

A、网站配置的基本内容:
port=80                          # jexus WEB服务器侦听端口(必填。当然可以是其它端口)
root=/ /var/www/mysite           # 网站URL根路径(虚拟目录)和对应的物理路径,两个路径字串之间必须用空格分开(必填。既使这个网站是一个纯粹的反向代理站,也得填)

#可选项
hosts=mysite.cn,www.mysite.cn    # 网站域名(建议填写),可以用泛域名,比如:*.mysite.cn(不填此项或只填一个“*”号表示这是默认网站,一个端口只能有一个默认站)
indexs=index.aspx,index.htm      # 首页文件名,可以写多个,用英文逗号分开(可以不填。因为JWS系统含有常用首页名)
aspnet_exts=mspx,ttt             # 添加新出现的或自定义的ASP.NET扩展名(不建议填。多个扩展名用英文逗号分开,不加点号。系统含有常用扩展名)


B、最简配置示例
port=80
root=/ /var/www/default

C、网站配置的高级选项
网站配置的高级选项全是可选项,应该根据网站的实际需要选填。
灵活使用高级选项,可以架设出一台与众不同的、功能强大的服务器平台或者服务器群组。

1、使用“URL重写”功能
URL重写是指WEB服务器将访问者的请求URL路径资源按指定的匹配规则解释和匹配为另外的一个真实RUL路径资源。

比如,希望别人访问“.php”类型的文件时,服务器返回 /404.html 这个文件:
rewrite=^/.+?.(asp|php|cgi)$ /404.html
# 格式:
# “rewrite=”的后面是两部分阻成,两部分之间由一个空格分开。
  空格前是匹配的条件:用正则表达式描述URL的匹配条件。
  空格后是匹配的目标:指的是如果用户访问的路径合乎前面的匹配条件,服务器将以哪个规则回应。

又如:
把“/bbs”解析为“/bbs/index.aspx”,把“/bbs/file-1” 匹配为 “/bbs/show.aspx?id=1”:
rewrite=^/bbs$ /bbs/index.aspx
rewrite=^/bbs/file-([0-9]{1,6})$ /bbs/show.aspx?id=$1
格式解释:rewrite的等号后含有两部分内容,用空隔分开。前半部分是一个正则表达式,用于描述需要URL重写的(用户浏览器中的)url路径样式,后半部分是当用户的URL合乎前面的正则表达式时,JWS应该重写和访问的真实URL路径。

2、禁止某IP或IP段访问本网站
denyfrom=111.222.111.*
denyfrom=101.202.111.*
denyfrom=101.201.1.132

3、禁止访问某文件夹及其子文件夹中的内容
DenyDirs=网站文件夹路径的URL路径,如 “/abcfiles”或 “~/abcfiles”,多个路径,用英文逗号分开

4、是否对请求的URL等进行安全检测
本选项默认是true,即需要检查,除非你的确需要关掉这个选项,否则可以不填,格式如下:
checkquery=false
(关掉本项可以提高服务器速度,但就安全而言,不建议关掉它)

5、NOFILE(无文件)功能
nofile=/mvc/controller.aspx
(注:这是Jexus特有的功能,指的是如果服务器不存在用户要访问的文件,服务器将使用什么文件应答。)
(提示:路由后,原RUL路径会存贮在Jexus特有一个服务器变量“X-Real-Uri”中)
(技巧:用这个功能,或者再加上URL Rewrite功能,你完全可以把URL路径与真实路径隔离开来,达到信息隐藏和简化URL的作用。)

6、NOLOG(无日志)功能
nolog=yes
(注:禁用网站日志功能会提高WEB服务器系统的的处理速度,但不足也是明显的,就是你无法详细了解网站的访问情况了)

7、长连接开关
keep_alive=true
注:V5.1版默认值是true,即默认使用长连接,可以不填。

8、反向代理功能
reproxy= /abc/ http://www.xxxx.com:890/abc/
参数的值由本站RUL根路径和目标网站URL根路径两部分组成,之间用空隔分开。
*技巧:反向代量的目标地址可以有多个,用英文逗号分隔,如:
reproxy=/abc/ http://192.168.0.3/abc/,http://192.168.0.4/abc/
这时,当用户访问/abc/时,jexus就会随机选择一台服务器进行访问,达到负载均衡或服务器集群的效果。

9、接受FAST-CGI提供的服务
对于TCP连接:
fastcgi.add=需要fast-cgi处理的文件扩展名|tcp:fast-cgi服务的IP地址:端口
如:fastcgi.add=php,php3|tcp:127.0.0.1:9000
对于unix sockets:
fastcgi.add=需要fcgi处理的文件扩展名|socket:路径
如:fastcgi.add=php,php3|socket:/tmp/phpsvr

10、启用gzip压缩功能
usegzip=true    #即UseGzip
解释:启用这个功能后,当用户访问“.htm”“.js”等文件时,Jexus会将这些文件进行GZIP压缩后发送给用户浏览器,这样,可以节约更多的网络带宽。

11、启用HTTPS进行SSL安全传输
本功能是对服务器与客户之间的数据进行加密传送,提供数据的保密性。具体方法请访问www.linuxdot.net的专题讲解。


七、Jexus操作:

1、基本的启动命令的格式(仅作例子,不建议使用)
mono /usr/jexus/jws.exe
如:mono /usr/jexus/jws.exe
这个命令运行后,用 Ctrl+c 组合键退出程序

2、以“服务”方式进行后台运行, 只需要基本命令后加一空格再加一“&”号(仅作例子,不建议使用)
mono /usr/jexus/jws.exe &

3、开机自动启动:
在/etc/rc.local 或类试的开机启动脚本中加入下面这一行命令:
mono /usr/jexus/jws.exe >/dev/null 2>&1 &
或者
/usr/jexus/jws.start  #推荐方式


(注意:不同的Linux系统可能有不同的启动方式,用户应根据不同系统的特点灵活定制)
(提示:jws.start是脚本文件,用户可以根据自己系统的特点去适当修改它,以便其启动)

4、使用脚本操作Jexus(推荐使用):
Jexus自带了三个脚本,分别是:jws.start、jws.restart、jws.stop。

功能1,对Jexus服务器操作:
jws.start     #启动JEXUS服务,可以写入rc.local文件中,从而达到开机自启动的目的;
jws.stop      #停止Jexus的运行。
jws.restart   #重启Jexus;

功能2,对某个指定的网站操作:
jws.restart 网站名     #加载/启动/重启一个指定的网站
jws.stop 网站名        #停止一个指定的网站


注意,这些脚本需要具有可执行权限,同时操作者也必须拥有管理员(root)权限。


八、卸载: 
1、在rc.local文件中删除你手工添加的开机自动启动Jexus的命令行(如果本来就没有添加过,这步操作就不必做了)
2、删除jexus文件夹及全部内容(建议只删除*.exe和*.dll,其它的,比如网站配置文件等不必删除,以便将来重新启用)。


九、信息反馈与技术交流: 
网址:www.linuxdot.net


十、重要声明: 
Jexus V5.1 是免费软件,可以自由下载、传播和使用。但Jexus作者、发布者、维护者不对Jexus的用途、作用、效果、技术支持以及其它相关内容作任何明确或暗含的承诺,不负担任何直接或间接的责任。

29-11-2011 0 条评论

Session.Clear()就是把Session对象中的所有项目都删除了,

Session对象里面啥都没有。但是Session对象还保留。
Session.Abandon()就是把当前Session对象删除了,下一次就是新的Session了。

主要的不同之处在于当使用Session.Abandon时,会调用Session_End方法(InProc模式下)。当下一个请

求到来时将激发Session_Start方法。而Session.Clear只是清除Session中的所有数据并不会中止该

Session,因此也不会调用那些方法。

18-11-2011 0 条评论

最近在折腾NHibernate,所以和大家分享一些东东

 

配置NHibernate有三种常见的配置方法。 
  1:在web.config,App.config里面配置 

<?xml version="1.0" encoding="utf-8" ?> <configuration> <!-- Add this element --> <configSections> <section name="hibernate-configuration" type="NHibernate.Cfg.ConfigurationSectionHandler, NHibernate" /> </configSections> <!-- Add this element --> <hibernate-configuration xmlns="urn:nhibernate-configuration-2.2"> <session-factory> <property name="dialect">NHibernate.Dialect.MsSql2005Dialect</property> <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property> <property name="connection.connection_string">Server=TLSZ207SQLEXPRESS;initial catalog=Test;Integrated Security=true</property> </session-factory> </hibernate-configuration> <!-- Leave the system.web section unchanged --> <system.web> </system.web> </configuration>

  则需要这样实例化Configuration对象。 
  NHibernate.Cfg.Configuration cfg = new NHibernate.Cfg.Configuration(); 
  这种配置方法将会到应用程序配置文件(App.Config,Web.Config)中查找NHibernate的配置信息. 

  2:hibernate.cfg.xml 
  建立名为hibernate.cfg.xml的文件。实例化Configuration config = new Configuration().Configure();这样NHibernate将会在目录下寻找hibernate.cfg.xml的配置文件。 
  hibernate.cfg.xml的格式 

<?xml version="1.0" encoding="utf-8" ?> <hibernate-configuration xmlns="urn:nhibernate-configuration-2.0" > <session-factory name="MySessionFactory"> <property name="dialect">NHibernate.Dialect.MsSql2005Dialect</property> <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property> <property name="connection.connection_string">Server=TLSZ207SQLEXPRESS;initial catalog=Test;Integrated Security=true</property> </session-factory> </hibernate-configuration>

  指明配置文件 
  Configuration config = new Configuration().Configure(configFileName); 
  这种配置方法将查找指定的Hibernate标准配置文件,可以是绝对路径或者相对路径。还可以通过编码的方式来添加配置信息: 
  IDictionary props = new Hashtable(); 
  props[“dialect”] = "NHibernate.Dialect.MsSql2005Dialect"; 
… 
  Configuration cfg = new Configuration(); 
  cfg.Properties = props;//cfg.AddProperties(props); 

  映射文件: 
  所有的XML映射都需要使用nhibernate-mapping-2.0 schema。目前的schema可以在NHibernate的资源路径或者是NHibernate.dll的嵌入资源(Embedded Resource)中找到。NHibernate总是会优先使用嵌入在资源中的schema文件。你可以将hibernate-mapping拷贝到 C:Program FilesMicrosoft Visual Studio .NET 2003Common7Packagesschemasxml路径中,以获得智能感知功能。 

<?xml version="1.0" encoding="utf-8" ?> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="Test" assembly="Test"> <class name="Test.Cat,Test" table="Cat"> <id name="CatID"> <column name="CatID" sql-type="char(32)" not-null="true"/> <generator class="uuid.hex" /> </id> <property name="Name"> <column name="Name" length="16" not-null="true" /> </property> <property name="Sex" /> <property name="Weight" /> </class> </hibernate-mapping>
02-11-2011 0 条评论

最近在做我们学校微软创新之旅的专题网站,文章内容是从原来的新闻系统里提取的。原来的新闻系统的文本编辑是用的FCKeditor,用户只要直接输入和上传图片就可以生成相关的HTML代码并存入数据库,而我想要将发布的文章的图片提取出来放在桌面,那么就必须将图片地址从HTML的代码里提取出来,同时我还需要去掉HTML标签的文本放入RSS中供用户订阅,所以只能想个办法解决这些问题。

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Text.RegularExpressions;


/// <summary> 
/// FiterHtml 的摘要说明 
/// </summary> 
public class FiterHtml
{
    public FiterHtml() { }
    ///   <summary> 
    ///   去除HTML标记 
    ///   </summary> 
    public static string NoHTML(string Htmlstring)
    {
        //删除脚本 
        Htmlstring = Regex.Replace(Htmlstring, @"<script[^>]*?>.*?</script>", "",
          RegexOptions.IgnoreCase);
        //删除HTML 
        Htmlstring = Regex.Replace(Htmlstring, @"<(.[^>]*)>", "",
          RegexOptions.IgnoreCase);
        Htmlstring = Regex.Replace(Htmlstring, @"([/r/n])[/s]+", "",
          RegexOptions.IgnoreCase);
        Htmlstring = Regex.Replace(Htmlstring, @"-->", "", RegexOptions.IgnoreCase);
        Htmlstring = Regex.Replace(Htmlstring, @"<!--.*", "", RegexOptions.IgnoreCase);
        Htmlstring = Regex.Replace(Htmlstring, @"&(quot|#34);", "/"",
          RegexOptions.IgnoreCase);
        Htmlstring = Regex.Replace(Htmlstring, @"&(amp|#38);", "&",
          RegexOptions.IgnoreCase);
        Htmlstring = Regex.Replace(Htmlstring, @"&(lt|#60);", "<",
          RegexOptions.IgnoreCase);
        Htmlstring = Regex.Replace(Htmlstring, @"&(gt|#62);", ">",
          RegexOptions.IgnoreCase);
        Htmlstring = Regex.Replace(Htmlstring, @"&(nbsp|#160);", "   ",
          RegexOptions.IgnoreCase);
        Htmlstring = Regex.Replace(Htmlstring, @"&(iexcl|#161);", "/xa1",
          RegexOptions.IgnoreCase);
        Htmlstring = Regex.Replace(Htmlstring, @"&(cent|#162);", "/xa2",
          RegexOptions.IgnoreCase);
        Htmlstring = Regex.Replace(Htmlstring, @"&(pound|#163);", "/xa3",
          RegexOptions.IgnoreCase);
        Htmlstring = Regex.Replace(Htmlstring, @"&(copy|#169);", "/xa9",
          RegexOptions.IgnoreCase);
        Htmlstring = Regex.Replace(Htmlstring, @"&#(/d+);", "",
          RegexOptions.IgnoreCase);
        Htmlstring.Replace("<", "");
        Htmlstring.Replace(">", "");
        Htmlstring.Replace("/r/n", "");
        Htmlstring = HttpContext.Current.Server.HtmlEncode(Htmlstring).Trim();

        return Htmlstring;
    }
    public static string StripHTML(string strHtml)
    {
        string[] aryReg =
            {
              @"<script[^>]*?>.*?</script>",
              @"<(///s*)?!?((/w+:)?/w+)(/w+(/s*=?/s*(([""'])(//[",
               @"'tbnr]|[^/7])*?/7|/w+)|.{0})|/s)*?(///s*)?>", @"([/r/n])[/s]+", 
                @"&(quot|#34);", @"&(amp|#38);", @"&(lt|#60);", @"&(gt|#62);", 
                @"&(nbsp|#160);", @"&(iexcl|#161);", @"&(cent|#162);", @"&(pound|#163);",
                @"&(copy|#169);", @"&#(/d+);", @"-->", @"<!--.*/n"
            };

        string[] aryRep =
            {
              "", "", "", "/"", "&", "<", ">", "   ", "/xa1",  //chr(161), 
              "/xa2",  //chr(162), 
              "/xa3",  //chr(163), 
              "/xa9",  //chr(169), 
              "", "/r/n", ""
            };

        string newReg = aryReg[0];
        string strOutput = strHtml;
        for (int i = 0; i < aryReg.Length; i++)
        {
            Regex regex = new Regex(aryReg[i], RegexOptions.IgnoreCase);
            strOutput = regex.Replace(strOutput, aryRep[i]);
        }
        strOutput.Replace("<", "");
        strOutput.Replace(">", "");
        strOutput.Replace("/r/n", "");
        return strOutput;
    }
    ///   <summary> 
    ///   移除HTML标签 
    ///   </summary> 
    ///   <param   name="HTMLStr">HTMLStr</param> 
    public static string ParseTags(string HTMLStr)
    {
        return System.Text.RegularExpressions.Regex.Replace(HTMLStr, "<[^>]*>", "");
    }
    ///   <summary> 
    ///   取出文本中的图片地址 
    ///   </summary> 
    ///   <param   name="HTMLStr">HTMLStr</param> 
    public static string GetImgUrl(string HTMLStr)
    {
        string str = string.Empty;
        string sPattern = @"^<img/s+[^>]*>";
        Regex r = new Regex(@"<img/s+[^>]*/s*src/s*=/s*([']?)(?<url>/S+)'?[^>]*>",
          RegexOptions.Compiled);
        Match m = r.Match(HTMLStr.ToLower());
        if (m.Success)
            str = m.Result("${url}");
        return str;
    }

}

测试用例:

protected void Page_Load(object sender, EventArgs e)
   {
       string test = "例:<strong   id=/"abc/">你好</strong><p><a href=/"http://green.njut.edu.cn/images/gslogo.png/" target=/"_blank/">绿荫网</a></p><IMG title=/"绿荫网/" src=/"http://121.9.206.74/Gift/face/2.gif/" border=0>H<EM>i,星烛网</EM>";
       FiterHtml filter = new FiterHtml();
       Response.Write(FiterHtml.NoHTML(test));
   }

  • About Totoro

  • 近期文章

  • 2017年七月
    « 10月    
     1
    2345678
    9101112131415
    16171819202122
    23242526272829
    3031  
  • 分类目录

  • 近期评论

  • 标签

  • 功能

  • 友情链接