目前,有许多页面利用XML文件的配置进行读取,下面说明如何利用VS.NET进行自动处理。
1、利用XML生成XSD
利用Visual Studio.NET新建一个空间解决方案,如下图,因为这里的测试仅仅是为了验证利用XML可以自动生成XSD,所以不用选择ASP.NET Web应用程序。
当建立好项目以后,我们往项目里添加一个XML文档,具体方法是:在解决方案资源管理器里用鼠标右键单击项目,选择“添加”/添加新项/ 如下图
在模板类型里选择“XML文件”,将建立的XML文档命名为TestCfg.xml。
输入下面的XML文本
将光标焦点必须在XML文档内,此时在Visual Studio.NET的菜单上可以看到“XML”菜单,在从下拉菜单里选择“创建架构”如下图
< Site >
< Tab > Home </ Tab >
< Module > Login </ Module >
</ Site >
这样VS将根据XML文档建立TestCfg.xsd。代码如下:
< xs:schema id ="NewDataSet" targetNamespace ="http://tempuri.org/TestCfg1.xsd" xmlns:mstns ="http://tempuri.org/TestCfg1.xsd"
xmlns ="http://tempuri.org/TestCfg1.xsd" xmlns:xs ="http://www.w3.org/2001/XMLSchema" xmlns:msdata ="urn:schemas-microsoft-com:xml-msdata"
attributeFormDefault ="qualified" elementFormDefault ="qualified" >
< xs:element name ="Site" >
< xs:complexType >
< xs:sequence >
< xs:element name ="Tab" type ="xs:string" minOccurs ="0" />
< xs:element name ="Module" type ="xs:string" minOccurs ="0" />
</ xs:sequence >
</ xs:complexType >
</ xs:element >
< xs:element name ="NewDataSet" msdata:IsDataSet ="true" msdata:Locale ="zh-CN" msdata:EnforceConstraints ="False" >
< xs:complexType >
< xs:choice maxOccurs ="unbounded" >
< xs:element ref ="Site" />
</ xs:choice >
</ xs:complexType >
</ xs:element >
</ xs:schema >
这样就完成了从
2、从XSD生成CS类文件
从XSD文件生成CS文件需要借助微软提供的XSD.exe这个文件,该文件随VS一同安装,默认放置再SDK/V1.1/Bin文件夹下,使用格式为:
xsd file.xsd {/classes | /dataset} [/element:element]
[/language:language] [/namespace:namespace]
[/outputdir:directory] [URI:uri]
其中参数/d[ataset] 生成一个从 DataSet 派生的类,该类与指定的架构相对应。
参数/n[amespace]:namespace 为生成的类型指定运行库命名空间。默认命名空间为 Schemas。
在Portal里就同时使用了/d 和/n参数。下面我们将使用/d参数,将上面生成的TestCfg.xsd转变生成为TestCfg.cs类文件。
如果你没有设置文件路径可以使用path设置如下图
在上面代码里,通过
xsd /d TestCfg.xsd
就生成了TestCfg.cs,该文件代码如下:
C#语法,因此可以进行编译
// ------------------------------------------------------------------------------
// <autogenerated>
// This code was generated by a tool.
// Runtime Version: 1.1.4322.573
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </autogenerated>
// ------------------------------------------------------------------------------
//
// 此源代码由 xsd, Version=1.1.4322.573 自动生成。
//
using System;
using System.Data;
using System.Xml;
using System.Runtime.Serialization;
[Serializable()]
[System.ComponentModel.DesignerCategoryAttribute( " code " )]
[System.Diagnostics.DebuggerStepThrough()]
[System.ComponentModel.ToolboxItem( true )]
public class NewDataSet : DataSet {
// 注意这里是NewDataSet类
// 代码很长,自己试验吧 ^_^
//


private SiteDataTable tableSite;
public NewDataSet() {
}
可以看到代码较多,但是复合
3、将TestCfg.cs编译为TestCfg.dll文件
将TestCfg.cs编译为TestCfg.dll文件需要借助与.NET Framework自动的CSC.exe这个文件,该文件安装在Frameword/v1.1.4322目录下如下图
这样就生成了TestCfg.dll文件
由于我们没有自定义命名空间,所以后面可以看到定义对象时是 NewDataSet
4、使用TestCfg.dll文件
将TestCfg.dll加入到任意一个项目以后,就可以读/些 XML文档,这里的读/写需要用到ReadXml 和WriteXml方法。示例代码如下:
{
NewDataSet mysite = (NewDataSet)HttpContext.Current.Cache[ " mySite " ];
if (mysite == null )
{
mysite = new NewDataSet();
string configFile = HttpContext.Current.Server.MapPath( " TestCfg.xml " );
mysite.ReadXml(configFile);
mysite.Site.AddSiteRow( " Home " , " 新闻 " );
mysite.WriteXml(configFile);
}
}
这样你打开XML文档
你就会发现,TestCfg.xml里已经添加了新的数据如下 其实读者也行已经发现生成类的方法的命名方式,例如 mysite.Site.AddSiteRow("Home","新闻");从XML文档里设置为 Site标记,系统自动添加Add前缀和Row后缀,因此AddSiteRow的两个参数:Home和新闻将分别赋值给XML里面的Tab元素与Module元素
接下来,就看你的水平发挥了,例如我现在想读取XML刚才添加的"lHome",它属于第一行第一列,所以代码如下
mysite.Site[0].Tab[0].ToString()











XML生成XSD的目的。但是这种生成是自动生成的,因此生成的XSD并不一定完全满足我们要要求,这就要求手动更改XSD的部分代码,这里我们仅仅测试就不更改了 索引从0开始编号
当然,在ASP.NET Portal Starter Kit,将ReadXml写成GetModuleSettings 函数,将WriteXml写成SaveSiteSettings函数就完成了配置的读取和保存