比如我有一个XML文档如下:<?xml version="1.0" encoding="gb2312" standalone="yes"?>
<content version="0.1">
<public>
<variant name="建立变量" var="voctemp" value="0"/>
<variant name="建立变量" var="code" value="0"/>
<variant name="建立变量" var="callerid" value=""/>
<variant name="建立变量" var="calleeid" value=""/>
<variant name="建立变量" var="chl" value=""/>
</public>
<system name="定义系统变量">
<sysvar name="系统变量" var="connect" value="20"/>
<sysvar name="系统变量" var="outoftime" value="19"/>
<sysvar name="系统变量" var="busy" value="17"/>
</system>
<beforeaction>
</beforeaction>
<afterend>
</afterend>
<action>
<answer name="应答" var="code" cardtype="1"/>
<trunkgetcall name="中继收主被叫号"  type="1" call="1" callvar="calleeid"  callervar="callerid" />
<switch name="建立分支控制" var="calleeid"  explain="" >
<case name="分支匹配" var="16848001"  explain="" >
<jumpflag name="建立跳转点"  num="1" />
<playvoice name="单文件放音" type="1" ="1" filename="c:\y\51.wav" cardtype="1" playtype="0" doerror="2" sy="0" var="voctemp"/>
<getcode name="收码" begincode="" endcode="" codelenth="1" var="code" cardtype="1" doerror="2" getcaller="2" noout="0" cleardtmf="0"/>
<switch name="建立分支控制" var="code"  explain="" >
<case name="分支匹配" var="*"  explain="" >
<jump name="跳转到" num="1" />
</case>
<case name="分支匹配" var="#"  explain="" >
<end/>
</case>
<case name="分支匹配" var="2"  explain="" >
<playvoice name="单文件放音" type="1" ="1" filename="c:\y\001\zg1.wav" cardtype="1" playtype="0" doerror="2" sy="0" var="voctemp"/>
<playvoice name="单文件放音" type="1" ="1" filename="c:\y\001\zg2.wav" cardtype="1" playtype="0" doerror="2" sy="0" var="voctemp"/>
<playvoice name="单文件放音" type="1" ="1" filename="c:\y\001\zg3.wav" cardtype="1" playtype="0" doerror="2" sy="0" var="voctemp"/>
<playvoice name="单文件放音" type="1" ="1" filename="c:\y\001\zg4.wav" cardtype="1" playtype="0" doerror="2" sy="0" var="voctemp"/>
<playvoice name="单文件放音" type="1" ="1" filename="c:\y\001\zg5.wav" cardtype="1" playtype="0" doerror="2" sy="0" var="voctemp"/>
<recordvoice name="录音" filename="outoftime" stop="#" recordlen="4915200" cardtype="1" doerror="1"/>
</case>
<case name="分支匹配" var="1"  explain="" >
<playvoice name="单文件放音" type="1" ="1" filename="c:\y\001\rj1.wav" cardtype="1" playtype="0" doerror="2" sy="0" var="voctemp"/>
<playvoice name="单文件放音" type="1" ="1" filename="c:\y\001\rj2.wav" cardtype="1" playtype="0" doerror="2" sy="0" var="voctemp"/>
<playvoice name="单文件放音" type="1" ="1" filename="c:\y\001\rj3.wav" cardtype="1" playtype="0" doerror="2" sy="0" var="voctemp"/>
<playvoice name="单文件放音" type="1" ="1" filename="c:\y\001\rj4.wav" cardtype="1" playtype="0" doerror="2" sy="0" var="voctemp"/>
<playvoice name="单文件放音" type="1" ="1" filename="c:\y\001\rj5.wav" cardtype="1" playtype="0" doerror="2" sy="0" var="voctemp"/>
</case>
<elsecase>
<playvoice name="单文件放音" type="1" ="0" filename="c:\y\52.wav" cardtype="1" playtype="0" doerror="2" sy="0" var=""/>
</elsecase>
</switch>
<jump name="跳转到" num="1" />
</case>
<case name="分支匹配" var="16848002"  explain="" >
<jumpflag name="建立跳转点"  num="2" />
<playvoice name="单文件放音" type="1" ="1" filename="c:\y\18.wav" cardtype="1" playtype="0" doerror="2" sy="0" var="voctemp"/>
<getcode name="收码" begincode="" endcode="" codelenth="1" var="code" cardtype="1" doerror="2" getcaller="2" noout="0" cleardtmf="0"/>
<switch name="建立分支控制" var="code"  explain="" >
<case name="分支匹配" var="2"  explain="" >
<playvoice name="单文件放音" type="1" ="0" filename="c:\y\20.wav" cardtype="1" playtype="0" doerror="2" sy="0" var=""/>
<jumpflag name="建立跳转点"  num="5" />
<switch name="建立分支控制" var="code"  explain="" >
<case name="分支匹配" var="2"  explain="" >
</case>
<case name="分支匹配" var="1"  explain="" >
<playvoice name="单文件放音" type="1" ="1" filename="c:\y\002\yc1.wav" cardtype="1" playtype="0" doerror="2" sy="0" var="voctemp"/>
</case>
<elsecase>
</elsecase>
</switch>
</case>
<case name="分支匹配" var="1"  explain="" >
<playvoice name="单文件放音" type="1" ="0" filename="c:\y\19.wav" cardtype="1" playtype="0" doerror="2" sy="0" var=""/>
<playvoice name="单文件放音" type="1" ="1" filename="c:\y\002\yc1.wav" cardtype="1" playtype="0" doerror="2" sy="0" var="voctemp"/>
<playvoice name="单文件放音" type="1" ="1" filename="c:\y\002\yc2.wav" cardtype="1" playtype="0" doerror="2" sy="0" var="voctemp"/>
<playvoice name="单文件放音" type="1" ="0" filename="c:\y\002\yc3.wav" cardtype="1" playtype="0" doerror="2" sy="0" var="voctemp"/>
<playvoice name="单文件放音" type="1" ="0" filename="c:\y\002\yc4.wav" cardtype="1" playtype="0" doerror="2" sy="0" var="voctemp"/>
<playvoice name="单文件放音" type="1" ="0" filename="c:\y\002\yc5.wav" cardtype="1" playtype="0" doerror="2" sy="0" var="voctemp"/>
</case>
<elsecase>
</elsecase>
</switch>
<jump name="跳转到" num="2" />
</case>
<case name="分支匹配" var="16848003"  explain="" >
<jumpflag name="建立跳转点"  num="3" />
<playvoice name="单文件放音" type="1" ="1" filename="c:\y\26.wav" cardtype="1" playtype="0" doerror="2" sy="0" var="voctemp"/>
<getcode name="收码" begincode="" endcode="" codelenth="1" var="code" cardtype="1" doerror="2" getcaller="2" noout="0" cleardtmf="0"/>
<switch name="建立分支控制" var="code"  explain="" >
<case name="分支匹配" var="2"  explain="" >
<playvoice name="单文件放音" type="1" ="0" filename="c:\y\28.wav" cardtype="1" playtype="0" doerror="2" sy="0" var=""/>
</case>
<case name="分支匹配" var="1"  explain="" >
<playvoice name="单文件放音" type="1" ="0" filename="c:\y\27.wav" cardtype="1" playtype="0" doerror="2" sy="0" var=""/>
<playvoice name="单文件放音" type="1" ="0" filename="c:\y\003\Nashihuakai1.wav" cardtype="1" playtype="0" doerror="2" sy="0" var="voctemp"/>
<playvoice name="单文件放音" type="1" ="0" filename="c:\y\003\Nashihuakai2.wav" cardtype="1" playtype="0" doerror="2" sy="0" var="voctemp"/>
<playvoice name="单文件放音" type="1" ="0" filename="c:\y\003\Nashihuakai3.wav" cardtype="1" playtype="0" doerror="2" sy="0" var="voctemp"/>
<playvoice name="单文件放音" type="1" ="0" filename="c:\y\003\Nashihuakai4.wav" cardtype="1" playtype="0" doerror="2" sy="0" var="voctemp"/>
<playvoice name="单文件放音" type="1" ="0" filename="c:\y\003\Nashihuakai5.wav" cardtype="1" playtype="0" doerror="2" sy="0" var="voctemp"/>
</case>
<elsecase>
</elsecase>
</switch>
<jump name="跳转到" num="3" />
</case>
<elsecase>
</elsecase>
</switch>
<end/>
</action>
</content>这个文档其实是一个语音程序的流程,我想将这个流程转换为C#程序,有什么好的办法吗?
如果.NET的XML方法一个个获取标签内容,名称等等效率很低,而且我想做个通用的,只要程序
一读取类似这样的XML文档就可以转换为程序来做,希望高手给个思路哈~~

解决方案 »

  1.   

    把xml解析出来,看看数据,你自己就应该有思路了吧
      

  2.   

    XSLT转换为cs代码,然后动态编译
      

  3.   

    1) CodeSmith,如果你会的话,写个解析脚本就可以了
    2) CodeDom技术,动态构建Class,Method等等
       ms-help://MS.MSDNQTR.v80.chs/MS.MSDN.v80/MS.VisualStudio.v80.chs/dv_fxadvance/html/0444ddf3-c3f6-44ed-a999-f710d9c3e0cf.htm
      

  4.   

    牛人啊
    C#动态编译 去百度下..你就知道了:)
    WPF是把控件之类的弄出来做标记语言,兄弟你是用代码来做成标记语言啊...强顶下...
      

  5.   


    在怎么弄你页得吧这个分析清楚了弄套程序出来啊
    然道你给编译器一个xml他就知道该做什么啊