在学习c#与XML的时候有这样一个实际问题,该问题是根据XML配置文件实现通用查询功能。有一个XML配置文件,要根据这个配置文件来连接数据库、并且动态生成控件、以及显示搜索结果。
由于本人水平实在有限,所以一些基础问题在此提出,请大家予以帮助和指点,在此谢谢大家!目前我可以根据这个配置文件的<DataBaseConfig>字段的内容连接数据库,但是到了下面 <SearchColumns>节点和 <DisplayInfo>节点时候我有点糊涂,不知道怎样实现了。对于<SearchColumns>节点 它的元素都是column,所以我可以创建一个类数组,将XML文件中该字段的每一行解析成一个类,然后存入类数组,等调用的时候在提取数组中的类来实现一些操作(比如根据这个类生成控件),但是到了<DisplayInfo>节点,有不同的元素,这样就不能存入一个类数组了,不知道怎么解决了。
所以想请教大家,请大家帮我看看。以上是我对于这个问题的理解以及能想到的解决方法,如过您有更好的解决方案请您一定予以指点,谢谢!!!
config.xml
========================
<?xml version="1.0" encoding="utf-8"?>
<DataBaseConfig>
 <DBConnectionsInfoConfig>
   <DataBaseDetail id="1" type="System.Data.SqlClient.SqlConnection" conn_string="server=;uid=sa;pwd=;database=Northwind;enlist=true"/>
   <DataBaseDetail id="2" type="System.Data.SqlClient.SqlConnection" conn_string="server=;uid=sa;pwd=;database=Shipping;enlist=true"/>
   <DataBaseDetail id="3" type="System.Data.SqlClient.SqlConnection" conn_string="server=;uid=sa;pwd=;database=Aircraft;enlist=true"/>
 </DBConnectionsInfoConfig>
 <SearchColumns>
    <column dataType="System.String" size="100" displayX="80" displayY="60" labelX="80" labelY="60" nameCH="字段1" displayType="1" searchType="and" dataBase="1" tableName="Table1">itemsetupid</column>
    <column dataType="System.String" size="100" displayX="80" displayY="60" labelX="80" labelY="60" nameCH="字段2" displayType="2" searchType="or" dataBase="1" tableName="Table2">itemid</column>
    <column dataType="System.String" size="100" displayX="80" displayY="60" labelX="80" labelY="60" nameCH="字段3" displayType="3" searchType="like" dataBase="1" tableName="Table4">teamcode</column>
    <column dataType="System.String" size="10" displayX="80" displayY="60" labelX="80" labelY="60" nameCH="字段4" displayType="1" searchType="大于" dataBase="2" tableName="Table10">localetask</column>
    <column dataType="System.String" size="100" displayX="80" displayY="60" labelX="80" labelY="60" nameCH="" displayType="1" searchType="小于" dataBase="2" tableName="Table5">submatid</column>
    <column dataType="System.String" size="100" displayX="80" displayY="60" labelX="80" labelY="60" nameCH="" displayType="1" searchType="等于" dataBase="2" tableName="Table1">declareid</column>
    <column dataType="System.String" size="100" displayX="80" displayY="60" labelX="80" labelY="60" nameCH="" displayType="3" searchType="and" dataBase="3" tableName="Table1">materialid</column>
    <column dataType="System.String" size="10" displayX="80" displayY="60" labelX="80" labelY="60" nameCH="" displayType="2" searchType="like" dataBase="3" tableName="Table5">materialkind</column>
 </SearchColumns>
 <DisplayInfo>
    <SQLInfo orderby="DataTime desc" groupby="ID">select Northwind.itemsetupid, Shipping.ArriveTime from Northwind n,Shipping s on n.ID=s.ID</SQLInfo>
    <column dataType="System.String" size="100" displayColor="" nameCH="字段1" dataBase="Northwind" tableName="Table1">itemsetupid</column>
    <column dataType="System.String" size="100" displayColor="" nameCH="字段2" dataBase="Northwind" tableName="Table2">itemid</column>
    <column dataType="System.DateTime" size="8" displayColor="" nameCH="字段3" dataBase="Shipping" tableName="Table4">ArriveTime</column>
    <column dataType="System.String" size="10" displayColor="" nameCH="字段4" dataBase="Aircraft" tableName="Table10">localetask</column>
    <column dataType="System.Int" size="4" displayColor="" nameCH="字段5" dataBase="Aircraft" tableName="Table6">teamcode</column>
</DisplayInfo>
</DataBaseConfig>============================对此配置文件的解释:
<DBConnectionsInfoConfig>节点:用于连接数据库    
                                  id属性=数据库id   type=数据库类型   conn_string=连接字符串<SearchColumns>节点:用于描述搜索字段
                       dataType=字段数据类型                  size=字段长度             displayX和displayY=待生成动态控件位置坐标 
                       labelX和labelY=控件的Label位置坐标    nameCH=字段的中文描述    displayType=显示方式(比如1=comboBox)
                       searchType=搜索类型(暂时不用)        dataBase=数据库id       tableName=表名   <DisplayInfo>节点:用于显示结果
                     orderby=排序    groupby=分组    displayColor显示颜色    
 

解决方案 »

  1.   

    如果xml太复杂,可以分开解析,DBConnectionsInfoConfig,SearchColumns,DisplayInfo分为3个类,每
    个类只读取自己那块内容,做个config类,写3个属性get方法获取那3个类的值。
    我是这么想的,也不知道合不合理
      

  2.   

    谢谢Tom1984,你的方法我觉得执行起来效率高,但是我水平实在有限,再学习一段时间肯定会用你的方法!谢谢!谢谢sunke5843323,看样子这样的一个思路还是可以的,决定先试试!谢谢大家!!