zoukankan      html  css  js  c++  java
  • 利用代码读取XML文档

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

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

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

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

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



    输入下面的
    XML文本

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



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

     

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

    在上面代码里,通过

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

         }

    可以看到代码较多,但是复合C#语法,因此可以进行编译

     

    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方法。示例代码如下:

     

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

    <?xml version="1.0" standalone="yes"?>
    <NewDataSet xmlns="http://tempuri.org/TestCfg.xsd">
      
    <Site>
        
    <Tab>Home</Tab>
        
    <Module>Login</Module>
      
    </Site>
      
    <Site>
        
    <Tab></Tab>
        
    <Module>万宝</Module>
      
    </Site> 
    </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函数就完成了配置的读取和保存

  • 相关阅读:
    条件随机场(Conditional random field)
    隐马尔科夫模型(hidden Markov Model)
    什么是EM算法?
    非线性支持向量机基础——核函数之我见
    支持向量机(support vector machine)
    决策树之CART算法
    决策树到底是什么?
    pytorch下对简单的数据进行分类(classification)
    git status 命令
    spring中事务的实现方式和失效场景
  • 原文地址:https://www.cnblogs.com/mqingqing123/p/252410.html
Copyright © 2011-2022 走看看