应用二叉树解析XML表示的函数计算表达式

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

应用二叉树解析XML 表示的函数计算表达式

XForms 的函数计算表达式简介

XForms 是用于 XML 数据处理的 Web 表单规 , 它允许您将表单的用途和外观

分开。目前 W3C 组织正在审查 XForms 1.1 的候选工作草案(1.0 是正式的

Internet 推荐标准)。IBM® Lotus Forms ( 电子表单领域的杰出产品之一 ) 就是基于 XForms 和 XFDL (Extensible Forms Description Language) 语言的,它把 XForms 强大的数据处理能力和 XFDL 语言丰富的表示能力紧密的结合在一起。

XForms 的数据模型(Data Model)封装了对表单数据的一些逻辑处理操作。如清单 1 所示,xforms:bind 元素拥有一个 calculate 属性。该属性通过函数计算表达式来实现表单数据的处理逻辑。

清单 1. XForms 的函数计算表达式

nodeset="instance('INSTANCE')/P001/VarianceMeals">

nodeset="instance('INSTANCE')/P001/minAccount">

在清单 2 中,我们简单介绍了另一种 XML 表示的函数计算表达式,其应用于一款基于 XML 语法的电子表单产品中。窥豹可见一斑,本文同样适用于其它基于XML 语法的函数计算表达式。

清单 2. XForms 的函数计算表达式

If DateTo < DateFrom Then False With Alert</p><p>"This date must come after the date you have entered in the Date From field"</p><p>End</plainText></p><p></calculation></p><p><calculation></p><p><func name="Min"></p><p><func name="Abs"></p><p><cell name="Summary" /></p><p></func></p><p><func name="Subtract"></p><p><cell name="Demo1"></p><p><cell name="Demo2"></p><p></func></p><p><number value="100" /></p><p></func></p><p><plainText>Min(Abs(Summary),Demo1-Demo2, 100)</plainText></p><p></calculation></p><p>…</p><p>在清单 2 中 <func> 标签用以标识函数或操作符。其 name 的属性值既是函数或操作符的名称。<cell> 标签,读者可以理解为用以标识函数计算表达式中的变量;而 <number>,<string> 等标签则是标识函数计算表达式中的常量容。</p><p>当我们需要解析函数计算表达式的时候 , 我们都有什么办法呢?比如在上面的代码片段中,直接解析 <plainText> 元素的容似乎是一个办法。直接解析</p><p><plainText>Min(Abs(Summary), Demo1-Demo2, 100)</plainText> 就已经得到了正确的结果。然而,解析含有大量嵌套的条件判断语句的函数计算表达式,如解析第一个 <plainText> 元素中的容就变得非常困难了。当我们要想进一步分析并处理 <plainText> 元素中的函数计算表达式的时候,表达式已经丢失了很多重要的原始信息(比如说类型信息),这样处理起来就难上加难了。有什么更好的办法么?我们可以尝试解析除了 <plainText> 元素以外的以</p><p><calculation> 元素为根的 XML 代码片段中的信息。</p><p>回页首</p><p>建立用以解析函数计算表达式的二叉树数据结构模型</p><p>仔细分析一下清单 2 所示的函数计算表达式,我们不难得出其数据结构模型,如图 1 所示 :</p><p>图 1. 函数计算表达式的树模型</p><p>我们可以通过 XML 解析器(DOM, SAX, StAX etc.)解析 XML 得到基于以树为数据结构的存模型。但是遍历以二叉树为数据结构的存模型要比以树为数据结构的存模型更方便明了(读者更为熟悉)。在图 2 中,我们把以树为数据结构的模型转换为对应的以二叉树为数据结构的模型(结点的孩子结点为该结点的左孩子结点;结点的兄弟结点为该结点的右孩子结点)。</p><p>图 2. 函数计算表达式的二叉树(BinTree)模型</p> </div> </div> </div> </div> </div> <div id="rightcol" class="viewcol"> <div class="coltitle">相关文档</div> <ul class="lista"> <li><a href="/doc/089185739.html" target="_blank">波兰算法求二叉树表达式的值</a></li> <li><a href="/doc/1310556397.html" target="_blank">算术表达式与二叉树</a></li> <li><a href="/doc/1f12985677.html" target="_blank">数据结构实验二叉树</a></li> <li><a href="/doc/1016818517.html" target="_blank">表达式用二叉树表示(1)</a></li> <li><a href="/doc/2e13247771.html" target="_blank">C语言二叉树运算</a></li> <li><a href="/doc/2d14373813.html" target="_blank">算术表达式与二叉树课程设计</a></li> <li><a href="/doc/2c17122383.html" target="_blank">基于二叉树结构的表达式求值算法</a></li> <li><a href="/doc/3d3094389.html" target="_blank">c语言实现一.二叉树操作 二.用栈实现算术表达式求值 课设报告</a></li> <li><a href="/doc/367755054.html" target="_blank">实验二叉树及其应用(严选材料)</a></li> <li><a href="/doc/3011750017.html" target="_blank">树和二叉树习题)</a></li> </ul> <div class="coltitle">最新文档</div> <ul class="lista"> <li><a href="/doc/071000073.html" target="_blank">饭店包间名字大全</a></li> <li><a href="/doc/0d10001030.html" target="_blank">word无法创建工作文件,请检查临时环境变量</a></li> <li><a href="/doc/0d10001458.html" target="_blank">自行车健身比赛开幕式讲话词</a></li> <li><a href="/doc/0510001469.html" target="_blank">2018乡村医生个人工作总结</a></li> <li><a href="/doc/0e10002558.html" target="_blank">MySQL测试题 SQL</a></li> <li><a href="/doc/0310002568.html" target="_blank">合勤NXC5200</a></li> <li><a href="/doc/0210004833.html" target="_blank">铁路集中箱空箱调度优化建模案例(案例2)</a></li> <li><a href="/doc/021000530.html" target="_blank">微分几何教学大纲-复旦大学数学科学学院</a></li> <li><a href="/doc/031000596.html" target="_blank">人教版九年级数学上册导学案:24.1.1_圆【精品】</a></li> <li><a href="/doc/0c10006773.html" target="_blank">(整容后办护照用)医院整容证明</a></li> <li><a href="/doc/0e10006860.html" target="_blank">危险废物管理台账</a></li> <li><a href="/doc/0310008420.html" target="_blank">2017年终大会会场物料设计方案</a></li> </ul> </div> </div> <script> var did = "713246964"; var ext = 'doc'; var docId = '1ed7ct54sklicouptnzctyk1a017topf'; var totalPage = 12; const pageNum = '12'; </script> <div class="clearfloat"></div> <div id="footer"> <div class="ft_info"> <a href="https://beian.miit.gov.cn">闽ICP备16038512号-3</a>&nbsp;<a href="/tousu.html" target="_blank">侵权投诉</a> &nbsp;&copy;2013-2023 360文档中心,www.360docs.net | <a target="_blank" href="/sitemap.html">站点地图</a><br> 本站资源均为网友上传分享,本站仅负责收集和整理,有任何问题请在对应网页下方投诉通道反馈 </div> <script>foot()</script> </div> </body> </html>