动机:
最初想起做二叉树是因为需要做一个公司结构图。 以前的做法都是直接用图象软件画出来一个图片。很好看,但每次有变动后都需要重新画一个新的。 另一方面,网页上对线条的显示、布局相当局限。根据动态生成的数据进行排版、定位都相当困难, 而且在美观上也差强人意。 做了各种尝试以后,决定用XML+XSL作数据运算; 用VML来美化线条,用JAVASCRIPT来给对象定位。
材料:
XML卷之结构树图
有2个文件:flow2.xml 和 flow2.xsl
效果:
浏览这里
讲解:
二叉树思路(1)
<html xmlns:v="urn:schemas-microsoft-com:vml">
<STYLE>
v\:* { BEHAVIOR: url(#default#VML) }
</STYLE>
<v:group id="group1" name="group1" coordsize = "100,100">
…
</v:group>
以上这些都是VML的基本格式,我就不详细讲解了。
XML是树型结构,我们读取每个数据就需要对这个
XML数据树进行遍历。而递归运算是XSL优势之一。
我也是在用其它多种方法进行遍历运算失败后才
决定使用XSL的。
<FlowRoot>
<vcTitle>二叉树--结构图</vcTitle>
<Author>Sailflying</Author>
<Email>sailflying@163.net</Email>
<FlowNode>
<iProcess>1</iProcess>
<vcCourse>第一个节点</vcCourse>
<iNextYes>
<FlowNode>
<iProcess>2</iProcess>
<vcCourse>第二个节点</vcCourse>
<iNextYes>…</iNextYes>
<iNextNo>…</iNextNo>
</FlowNode>
</iNextYes>
<iNextNo>
<FlowNode>
<iProcess>3</iProcess>
<vcCourse>第三个节点</vcCourse>
<iNextYes>…</iNextYes>
<iNextNo>…</iNextNo>
</FlowNode>
</iNextNo>
</FlowNode>
</FlowRoot>
逻辑上很简单,当前节点(1)下面有两个子节点(2,3)。
只需要将节点2和节点3定位在节点1的左下方和右下方就可以了。
这里我将左右节点的连接线分别用了绿色和红色,方便显示。
前面我们说到了XSL的递归功能,为了更清楚的看到每一个详细的
显示步骤,只需要仿照下面的代码,加一个alert语句就可以了。
<xsl:template match="FlowNode">
…
<SCRIPT language="JavaScript1.2">
…
alert('逐步显示');
…
</SCRIPT>
…
</xsl:template>
看了上面的慢动作,是否能让大家了解到我的思路。
二叉树思路(2)
我的思路很简单:
(1)读取当前节点的资料,用VML生成一个新的对象。
给对象赋初始数值(如 name,id,style样式等)
(2)用脚本控制来给当前对象定位
(3)当前节点和它的父亲节点之间加箭头,线条。
(4)继续找当前节点的子节点,一直循环定位到结束。
也就是所有节点都遍历完毕,已经生成好了树。
<xsl:template match="FlowNode">
…
<xsl:apply-templates />
…
</xsl:template>
<xsl:template match="iNextYes">
<xsl:apply-templates select="./FlowNode" />
</xsl:template>
<xsl:template match="iNextNo">
<xsl:apply-templates select="./FlowNode" />
</xsl:template>
>>>更多 xml教程 | 返回 xml教程 列表 | 返回 学院部落 首页
![]() | 使用 XML 文件记录操作日志 | 04-10 |
![]() | XML WebService完全实例详细解析 | 03-20 |
![]() | 什么是 XML Web Service | 01-17 |
![]() | 什么是XML | 12-26 |
![]() | XML技巧五则 | 12-19 |
![]() | XML 增、删、改和查示例 | 12-19 |
![]() | xml文件调用css | 11-29 |
![]() | 一个读取扩展名为xml的资源文件的方法 | 11-29 |
![]() | 收集整理ASP的常用内置函数 | 10-30 |