Markup之xml生成

本文主要探讨XML的生成,提供了一段代码示例,包括SetDoc、IntoElem、OutOfElem、AddElem、AddChildElem、SetAttrib和SetChildAttrib等方法的使用,帮助读者理解和掌握生成复杂XML文件的技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这次我们只谈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数据写入文件中

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值