XML和XSL生成类PowerPoint组织结构图(二)

原创 2004年01月04日 10:21:00

          </span>

                   

       </xsl:for-each>

   </xsl:template>

</xsl:stylesheet>

 

设计的思路为:

   首先想到的是,组织结构在表现形式上是各个组织部门之间为:上层(权且以父层代替)以包含下层(权且以子层代替),同时各个同被父层包含的子层之间是并列平等的。

   这样,我就想到对于每一层而言,都有相同的结构:对自己描述,和包含子层的容器,即为:

对自己的描述

 

包含子层的容器

   想到这点,我就想到用

       <SPAN>

<SPAN></SPAN> --------对自己的描述

<DIV></DIV>   --------包含子层的容器

</SPAN>

   结构来表示一个节点。因为这样既可保证各个相同层的节点是并列的,同时也实现了对每一节点,对自己的描述和所包含的子层在表现形式上是上下的。

   确定了节点的表现结构后,再来考虑组织结构的数据表现格式,为保证获得组织结构数据结构的通用性和易获得性,我没有考虑按实际组织结构关系那样组织XML文件中各节点之间的关系。因为考虑到我的XML文件是从数据库中动态的生成的,如生成的XML文件格式为:

   <Layer>

       <id>01</id>

       <text>aaaa</text>

       <children>

          <Layer>

               <id>0101</id>

               <text>bbbb</text>

             <children>

……

               </children>

          </Layer>

       </children>

   </Layer>

   虽然看上去挺明白,但小弟认为即不是很通用,同时,也是最关键的,用SQL语句从数据库中获得这样的数据结构,嘿嘿,小弟自觉的虽有些经纶,但还真的实现不了:),所以放弃了。选自认为最简单的实现方法,就是象上文Organize .xml中的那样,从各个节点看去,虽相互平等,但他们通过id来关联,子节点的id=父节点的id+序号,通过id来建立彼此的相互关系(即为:0101,0102,.010N都是01的子节点)。这样,小弟认为,即使一个初学者,掰一会的书,也会搞定生成这个数据结构的SQL语句来。看到此,暂且按住不表,俗话说,“真正为用户考虑的开发者,才是好的开发者”,在这字里行间,所显露的小弟的伟大和用心良苦之处,请大家暂停手中的一切事务,为小弟努力的呱唧呱唧。呵呵,终于,掌声四起。。。。。。

   确定好了组织结构的数据表现格式,接下来所要考虑的最关键的XSL,就有了针对性了。因为,小弟所设想的流程是:

   当检索到某一个节点时,首先要考虑的是提取该节点的对自己的描述,也即该节点的title,

   同时对该节点,肯定还要查找是否有所属的子节点并提取之。对于每个节点依次进行相同的操作。

  

   既然是这样,那根据小弟多年在编程中摸打滚爬,碰了东墙磕西墙历练出来的直觉,首先隐约感觉到的就是递归!。哈哈哈哈哈哈。。。。小弟自以为找到的解决的方案,各位看官意下如何?呵呵,暗爽呀。以下就是小弟根据所想的,实际的解决方案:

   首先从根节点开始:<xsl:template match="/">

   然后调用模板getLayer,将当前根节点的第一个子节点的id作为变参传入模板:

       <xsl:call-template name="getLayer">

          <xsl:with-param name="LayerID" select="/Root/Layer[1]/id"/>

      </xsl:call-template>

   在模板getLayer中,当检索到某一个节点,首先是提取该节点的对自己的描述。这可以通过XSLT语句

       <xsl:value-of select="./text"/>

获得。(以下相关的XSLT语句更详细准确的描述,请查阅相关的资料和书籍)

   同时,通过自身的id,在XML数据中检索出自己相关的所属子节点。这个是通过:

   <xsl:for-each select="//Layer[substring(id,1,string-length($LayerID))=$LayerID

          and string-length(id)=string-length($LayerID)+2]">

语句搞定的。在这个语句中,LayerID既为传入的父节点的id,通过该语句,可以检索出所有id前string-length($LayerID)位的内容=$LayerID并且总长度= string-length($LayerID) + 2 位序号长度的节点(这里,小弟暂定的每一节点的子节点的长度为该节点的长度+2位序号长度,可根据实际需要改动)。通过这个语句,也实现了另外一个功能,既:不需要考虑各个节点的顺序或位置。在XML文件中,子节点和父节点之间的顺序是可以跳跃的,各个Layer的顺序可以随意放置。我想,这应该也方便了在实际应用中的运用。

    然后,依次根据每个检索到的子节点,递归调用模板getLayer。由此取得每个子节点的内容,填充到包含子层的容器中。

    通过以上的设计思想和解决方案,生成了PowerPoint组织结构图。而且,通过进一步的考虑,只改动XSL,利用同一个原XML文件,小弟还实现了类资源管理器的树状结构。如下图:

         实现的思想就是将同一层的节点布局由现在的水平排列改为上下的竖直排列,每一节点的文本方向由竖直改为水平,同时增加相应的缩进平即可。呵呵,是不是很简单!

         通过这个学习和实践的过程,小弟虽稍有愚钝,却也感觉到了XMLXSL的灵活和强大功能。小弟以为,XML提供了数据的存储,XSL则提供了数据的操作和表现。XSL一如XML的外挂,内在的内容始终如一,而通过配合相应的不同的XSL,则可构造多样的表现形式和应用出来。不知各位意下如何。

         以上是小弟初试所学,水平所限,当然其中会可能需要推敲和完善的地方,小弟之所以献丑,就是希望能与大家分享之余,能得到各位看官的赐教,能在各位看官的指点和批评中进步,这就是小弟的所希望的最大的收获了。

 

         完整的源文件下载请访问:http://mail.24mov.com/Organize/Organize.rar

         希望能多和大家交流探讨:chenhaoonline@hotmail.com

    

利用OpenXML SDK2.0 导出PPT的功能

相关软件包:http://www.microsoft.com/en-us/download/details.aspx?id=5124  一个是SDK、一个是SDK Tool...
  • qq277366155
  • qq277366155
  • 2014年10月09日 17:59
  • 1755

Office文件的奥秘——.NET平台下不借助Office实现Word、Powerpoint等文件的解析

转载http://www.cnblogs.com/mayswind/archive/2013/03/17/2962205.html 【题外话】 这是2010年参加比赛时候做的研究,当时...
  • Rodney443220
  • Rodney443220
  • 2013年07月26日 15:38
  • 6381

XML文件与xsl文件的作用与关系

XML文件的发明可以说是计算机领域的一大进步,有着说不清的好处,比如格式规范,跨平台等。XML文件的主要作用是数据的载体,用于承载数据。跟XML相关的格式文件还有一大堆,这里我们慢慢来说清楚。   ...
  • sundacheng1989
  • sundacheng1989
  • 2016年08月09日 14:01
  • 4118

xsl解析xml生成表格,表格行动态隐藏与显示

  • 2011年10月31日 02:51
  • 897B
  • 下载

根据xsl模板及xml数据文件生成pdf(文字内容复制不乱码)

使用FOP技术,配合xsl模板及XML数据生成PDF报表和线上打印业务
  • Angelahedl
  • Angelahedl
  • 2017年05月23日 15:33
  • 432

java编程 使用XSL+XML生成HTML文件

1.由于公司需要用xslt 结合 xml 使用,并生成数据,只好研究了一下;下面是一个简单示例: 第一步:创建一个userMessage.xml 文件 文件内容如下: [color=gray ...
  • banqingyang
  • banqingyang
  • 2011年02月25日 23:52
  • 420

java使用XSL+XML生成HTML文件

1、xml.xml xml version="1.0" encoding="utf-8"?> xml-stylesheet type="text/xsl" href="xsl.xsl"?> ...
  • xuefeimengli2010
  • xuefeimengli2010
  • 2011年08月25日 23:46
  • 204

java使用XSL+XML生成HTML文件

转自:http://www.blogjava.net/yangxiang/archive/2009/08/11/290688.html1、xml.xml XML与JSP ...
  • wqjsir
  • wqjsir
  • 2011年02月25日 11:14
  • 2055

xsl-fo模板,pl/sql生成的xml数据源,R12输出PDF

xsl xslt xsl-fo xml publisher fop
  • erenjian
  • erenjian
  • 2011年05月30日 00:17
  • 454

使用XML及XSL生成简单HTML

使用XML及XSL生成简单HTML 本文来自博客园 作者:宋卫东   某些时候需要生成HTML展现数据,考虑过XML加XSL方法吗?比如,以html邮件的方式发送一些数据。 本文通过两个已经存...
  • YaoXTao
  • YaoXTao
  • 2012年03月06日 12:48
  • 613
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:XML和XSL生成类PowerPoint组织结构图(二)
举报原因:
原因补充:

(最多只允许输入30个字)