利用代码读取XML文档

目前,有许多页面利用XML文件的配置进行读取,下面说明如何利用VS.NET进行自动处理。

(图片已经错了)1、利用XML生成XSD

   利用Visual Studio.NET新建一个空间解决方案,如下图,因为这里的测试仅仅是为了验证利用XML可以自动生成XSD,所以不用选择ASP.NET Web应用程序。
  image001.jpg

 

   当建立好项目以后,我们往项目里添加一个XML文档,具体方法是:在解决方案资源管理器里用鼠标右键单击项目,选择“添加”/添加新项/  如下图
image002.jpg

  在模板类型里选择“XML文件”,将建立的XML文档命名为TestCfg.xml
image003.jpg


输入下面的XML文本

<? xml version="1.0" standalone="yes" ?>
< Site >
    
< Tab > Home </ Tab >
   
< Module > Login </ Module >
 
</ Site >



 将光标焦点必须在XML文档内,此时在Visual Studio.NET的菜单上可以看到“XML”菜单,在从下拉菜单里选择“创建架构”如下图

 

image004.jpg 

这样VS将根据XML文档建立TestCfg.xsd。代码如下:

<? xml version="1.0"  ?>

< 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 >


这样就完成了从

XML 生成 XSD 的目的。但是这种生成是自动生成的,因此生成的 XSD 并不一定完全满足我们要要求,这就要求手动更改 XSD 的部分代码,这里我们仅仅测试就不更改了

 

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设置如下图

 

image005.jpg在上面代码里,通过

xsd  /d TestCfg.xsd

就生成了TestCfg.cs,该文件代码如下:


// ------------------------------------------------------------------------------
//  <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类    
// 代码很长,自己试验吧 ^_^
// dot.gif dot.gif
     private  SiteDataTable tableSite;
    
public  NewDataSet() {

     }

可以看到代码较多,但是复合

C# 语法,因此可以进行编译

 

3、将TestCfg.cs编译为TestCfg.dll文件

TestCfg.cs编译为TestCfg.dll文件需要借助与.NET Framework自动的CSC.exe这个文件,该文件安装在Frameword\v1.1.4322目录下如下图

 image006.jpg

 

这样就生成了TestCfg.dll文件

 由于我们没有自定义命名空间,所以后面可以看到定义对象时是 NewDataSet

 

4、使用TestCfg.dll文件

 将TestCfg.dll加入到任意一个项目以后,就可以读/ XML文档,这里的读/写需要用到ReadXml WriteXml方法。示例代码如下:

 

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

   {                 
        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里已经添加了新的数据如下

None.gif <? xml version="1.0" standalone="yes" ?>
None.gif
< NewDataSet  xmlns ="http://tempuri.org/TestCfg.xsd" >
None.gif  
< Site >
None.gif    
< Tab > Home </ Tab >
None.gif    
< Module > Login </ Module >
None.gif  
</ Site >
None.gif  
< Site >
None.gif    
< Tab > </ Tab >
None.gif    
< Module > 万宝 </ Module >
None.gif  
</ Site >  
None.gif
</ NewDataSet >

 

 其实读者也行已经发现生成类的方法的命名方式,例如 mysite.Site.AddSiteRow("Home","新闻");

从XML文档里设置为 Site标记,系统自动添加Add前缀和Row后缀,因此AddSiteRow的两个参数:Home和新闻将分别赋值给XML里面的Tab元素与Module元素
  接下来,就看你的水平发挥了,例如我现在想读取XML刚才添加的"lHome",它属于第一行第一列,所以代码如下
mysite.Site[0].Tab[0].ToString()
索引从0开始编号

当然,在ASP.NET Portal Starter Kit,将ReadXml写成GetModuleSettings 函数,将WriteXml写成SaveSiteSettings函数就完成了配置的读取和保存
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值