有一个文本数据:
S(#C,A,D)
R(#A,B)
T(E,A)
data
T(e1,e2)
S(c3,a1,d1)
S(c1,a2,d2)
S(c2,a1,d3)
R(a1,b1)
R(a2,b2)输出形式:
<DB>
<R #A="a1" B="b1">
<S #C="c2" D="d3">
</S> 
<S #C="c3" D="d1">
</S>
</R>
<R #A="a2" B="b2">
<S #C="c1" D="d2">
</S>
<T E="e1">
</T>
</R>
</DB>说明:S,R,T是表名,#表示主键,C,A,D表示字段,S表中的A是R中的外键,xml形式先输出R的数据库,然后把跟R的主键有关的数据也输出.如
<R #A="a1" B="b1">
<S #C="c2" D="d3">
</S> 
<S #C="c3" D="d1">
</S>
</R>要求:编程实现功能,最好用面向对象语言,如java,c#,c++请高手指点思路或写个程序实现,谢谢~

解决方案 »

  1.   

    新建一个DataSet
    按行读数据,字符串解析,并填充数据
    建立外键约束
    遍历DataRow dr in DataTableR
    由dr.GetChildRows得到相关数据
    格式化,然后输出到XML
      

  2.   

    这很像XML,用dataset.readxml应该可以的
      

  3.   

    把这些数据一行一行的读取到一个列表中,然后,按照你的规则进行处理就行了
    比如说这三行是表结构的
    S(#C,A,D) 
    R(#A,B) 
    T(E,A) 读取到列表,得到三个值list[0]="S(#C,A,D) ";list[1]="R(#A,B)) ";String str="S(#C,A,D)";
    先用substring(0,str.indexOf("("))//找到左括号得到表名
    str=str.substring(str.indexOf("(")+1);//得到#C,A,D)
    然后找到)前面的值,得到#C,A,D //当前这个也可以用正则进行split,
    string []arr=str.split(",");
    //循环处理arr,如果
    if(arr[i].substring(0,1)=="#") //代表主键这样一分析表结构不是出来了,
    再分析数据部分思路类似
      

  4.   

    主要的问题应该在如何把数据按照表结构输出成xml的处理部分吧