这次我们只谈Xml生成,不说解析。
网上拿来一段代码示例
CMarkup xml;
xml.SetDoc( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n" );
xml.AddElem( "School" );
xml.IntoElem();
xml.AddElem( "Department" );
xml.SetAttrib("name","123");
xml.AddElem( "Department", "Computer" );
xml.AddElem( "Department", "Math" );
xml.AddElem( "Department", "English" );
xml.OutOfElem();
xml.Save( "School.xml" );
在当前目录生成xml,内容如下
<?xml version="1.0" encoding="UTF-8"?>
<School>
<Department name="123"/>
<Department>Computer</Department>
<Department>Math</Department>
<Department>English</Department>
</School>
有客官要说了,我要生成的xml文件比这个复杂多了
CMarkup xml;
xml.SetDoc( "<?xml version=\"1.0\" encoding=\"utf-8\"?>" );
xml.AddElem( "include" );
xml.AddChildElem( "context" );
xml.SetChildAttrib( "name", "ForExten" );
xml.IntoElem();
xml.AddChildElem( "extension" );
xml.SetChildAttrib( "name", "ExtenCallExten" );
xml.IntoElem();
xml.AddChildElem( "condition" );
xml.SetChildAttrib( "field", "destination_number" );
xml.SetChildAttrib( "expression", "^(1[0-9][0-9][0-9])$" );
xml.IntoElem();
xml.AddChildElem( "action" );
xml.SetChildAttrib( "application", "export" );
xml.SetChildAttrib( "data", "dialed_extension=$1" );
xml.AddChildElem( "action" );
xml.SetChildAttrib( "application", "set" );
xml.SetChildAttrib( "data", "ringback=${us-ring}" );
xml.AddChildElem( "action" );
xml.SetChildAttrib( "application", "set" );
xml.SetChildAttrib( "data", "transfer_ringback=$${hold_music}" );
xml.AddChildElem( "action" );
xml.SetChildAttrib( "application", "set" );
xml.SetChildAttrib( "data", "call_timeout=30" );
xml.AddChildElem( "action" );
xml.SetChildAttrib( "application", "set" );
xml.SetChildAttrib( "data", "continue_on_fail=true" );
xml.AddChildElem( "action" );
xml.SetChildAttrib( "application", "hash" );
xml.SetChildAttrib( "data", "insert/${domain_name}-call_return/${dialed_extension}/${caller_id_number}" );
xml.AddChildElem( "action" );
xml.SetChildAttrib( "application", "hash" );
xml.SetChildAttrib( "data", "insert/${domain_name}-last_dial_ext/${dialed_extension}/${uuid}" );
xml.AddChildElem( "action" );
xml.SetChildAttrib( "application", "set" );
xml.SetChildAttrib( "data", "called_party_callgroup=${user_data(${dialed_extension}@${domain_name} var callgroup)}" );
xml.AddChildElem( "action" );
xml.SetChildAttrib( "application", "hash" );
xml.SetChildAttrib( "data", "insert/${domain_name}-last_dial_ext/${called_party_callgroup}/${uuid}" );
xml.AddChildElem( "action" );
xml.SetChildAttrib( "application", "hash" );
xml.SetChildAttrib( "data", "insert/${domain_name}-last_dial_ext/global/${uuid}" );
xml.AddChildElem( "action" );
xml.SetChildAttrib( "application", "hash" );
xml.SetChildAttrib( "data", "insert/${domain_name}-last_dial/${called_party_callgroup}/${uuid}" );
xml.AddChildElem( "action" );
xml.SetChildAttrib( "application", "bridge" );
xml.SetChildAttrib( "data", "user/${dialed_extension}@${domain_name}" );
xml.AddChildElem( "action" );
xml.SetChildAttrib( "application", "hangup" );
xml.SetChildAttrib( "data", "NORMAL_CLEARING" );
xml.OutOfElem();
xml.OutOfElem();
xml.AddChildElem( "extension" );
xml.SetChildAttrib( "name", "ExtenCallTrunk" );
xml.IntoElem();
xml.AddChildElem( "condition" );
xml.SetChildAttrib( "field", "destination_number" );
xml.SetChildAttrib( "expression", "^9(.*)$" );
xml.IntoElem();
xml.AddChildElem( "action" );
xml.SetChildAttrib( "application", "set" );
xml.SetChildAttrib( "data", "call_timeout=60" );
xml.AddChildElem( "action" );
xml.SetChildAttrib( "application", "bridge" );
xml.SetChildAttrib( "data", "{origination_caller_id_name=037156190700,origination_caller_id_number=037156190700}sofia/gateway/hykjcs57/$1" );
xml.AddChildElem( "action" );
xml.SetChildAttrib( "application", "hangup" );
xml.SetChildAttrib( "data", "NORMAL_CLEARING" );
xml.AddChildElem( "action" );
xml.SetChildAttrib( "name", "start_dtmf" );
xml.Save( "d:\\123.xml" );
查看d盘生成的xml内容如下
<?xml version="1.0" encoding="utf-8"?><include>
<context name="ForExten">
<extension name="ExtenCallExten">
<condition field="destination_number" expression="^(1[0-9][0-9][0-9])$">
<action application="export" data="dialed_extension=$1"/>
<action application="set" data="ringback=${us-ring}"/>
<action application="set" data="transfer_ringback=$${hold_music}"/>
<action application="set" data="call_timeout=30"/>
<action application="set" data="continue_on_fail=true"/>
<action application="hash" data="insert/${domain_name}-call_return/${dialed_extension}/${caller_id_number}"/>
<action application="hash" data="insert/${domain_name}-last_dial_ext/${dialed_extension}/${uuid}"/>
<action application="set" data="called_party_callgroup=${user_data(${dialed_extension}@${domain_name} var callgroup)}"/>
<action application="hash" data="insert/${domain_name}-last_dial_ext/${called_party_callgroup}/${uuid}"/>
<action application="hash" data="insert/${domain_name}-last_dial_ext/global/${uuid}"/>
<action application="hash" data="insert/${domain_name}-last_dial/${called_party_callgroup}/${uuid}"/>
<action application="bridge" data="user/${dialed_extension}@${domain_name}"/>
<action application="hangup" data="NORMAL_CLEARING"/>
</condition>
</extension>
<extension name="ExtenCallTrunk">
<condition field="destination_number" expression="^9(.*)$">
<action application="set" data="call_timeout=60"/>
<action application="bridge" data="{origination_caller_id_name=037156190700,origination_caller_id_number=037156190700}sofia/gateway/hykjcs57/$1"/>
<action application="hangup" data="NORMAL_CLEARING"/>
<action name="start_dtmf"/>
</condition>
</extension>
</context>
</include>
所以呢,我们要学习的是方法:
SetDoc 从字符串中导入XML数据,并对它解析
IntoElem 进入当前主位置的下一级,当前的位置变为父位置。
OutOfElem 使当前父位置变成当前位置。
AddElem 在当前主位置元素或最后兄弟位置之后增加一个元素。
AddChildElem 在当前子位置元素或最后一个子位置之后增加一个元素。
SetAttrib 设置当前主位置元素(或正在进行的指令的)某一具体属性的值
SetChildAttrib 设置当前子位置元素某一具体属性的值
Save 将XML数据写入文件中