Username: Password:

使用xslt将xml数据转换成html_xml技巧
来源:作者:网友供稿 发布时间:2007-12-07 05:40:59

   

使用一个简单的 XSL 样式表就能够将 XML 数据转换成 HTML。随着 XML 规范的不断演进,在新的版本中满足每个人的需要似乎已成为必要;不幸的是,进行简单的转换一直都困扰着规范。

假设我有一个表示一个页面内容的 XML 数据,现在我想将其内容转换成布局。下面是我想要转换的 XML:




   
       
            Folder 1
           
               
                    File 1
                   
                       
                           
                                string
                                50
                                some data
                           

                       

                   

               

           

       

   

这个内容表示一组文档夹、文档和域。每个文档夹包含文档,每个文档包含用于输入数据的域。文档夹组中的每个文档夹都将表现为一个 TABLE 的第一行的一个 TR 元素和一个 TD 元素。文档组中的每个文档都将表示为嵌套在文档夹 TR 元素中的一个 TABLE 元素的第一行的一个 TR 元素和一个 TD 元素。域组中的每个域都将在相关的文档中表现为一个 INPUT。

为了实现这一想法,我们需要将遍历 XML 然后根据XSL 构建一个表。

下面是用于这个转换的 XSL:


    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
    xmlns:msxsl="urn:schemas-microsoft-com:xslt"
    xmlns:fn="http://www.mycompany.com/mynamespace">


    function getElementCount(nodelist, what) {
        var rtrn = 0;
        rtrn = nodelist[0].parentNode.selectNodes(what).length;
        return (rtrn + 1); //1 is added for filler TD
    }

    WIDTH="100%" BORDER="0" ID="tblRoot" NAME="tblRoot"
    style="table-layout:fixed;">
   
       
       
            width:55px
           
       

       

       
   

   
   


       
           
               
           

               
           
                WIDTH="100%" BORDER="0" style="table-layout:fixed;">
               
                   
                   
                        width:55px;
                       
                   

                   

                   
               

               
                   


                       
                           
                               
                           

                       
                       
                            text
                           
                               
                           

                           
                               
                           

                       


                       

                       
                   


               
           

       
   



在 stylesheet 标记中,我们配置了几个命名空间,包括定义任何 xsl 转换标记的 xsl 命名空间。能够让我们创建能够在样式表中使用的用户函数的msxml 命名空间。我使用他得到任何的子元素,以便得到一个 TD 标记的一个 COLSPAN 属性集。用于加入一组用户定义的函数的fn 命名空间,该命名空间由msxml:script element 创建。

 
然后,我们创建外部 TABLE 和第一个 TR。在 TR 中,我为 XML 中指定的每个文档夹创建一个 TD。我使用了 xsl:element 标记,因为他允许我添加自定义属性或执行一个函数来为另一个 TD 元素中的 COLSPAN 属性配置一个属性。

在为每个文档夹创建了所需的 TD 之后,我开始为每个文档夹创建 TR。我只向这个 TR 添加一个 TD,但是我将他的 COLSPAN 属性设为等于文档夹组中文档夹标记的数量再加一。多出的一是用来在一个固定布局样式的 TABLE 中填充空格用的。

为了得到 COLSPAN,我传入当前的上下文(在这里由“.”指定)和我想计算的节点的名字。在我的函数中,我得到当前的上下文,paraentNode,和 XPath 查询中指定的节点的数量。然后函数返回这个数量加上一以填充 TD。

有了这个 TD,我在其中嵌入另外一个 TABLE,该 TABLE 包含文档组中的每个文档。从这一点开始,其过程就和外部 TABLE 转换相同。最后的步骤是添加每个文档中的域。这次我没有再创建嵌入的 TABLE,只是把这些域添加到当前的 TD 中。

一旦我完成了通用布局,我就能够开始添加用户界面功能了,比如说隐藏掉其他的文档夹和文档行,直到用户点击了相关的选项卡。这一功能能够通过编写支持这一功能的脚本来实现,添加一个 onclick xsl:attribute 元素到文档夹和文档 TD 元素,然后将他的值配置为脚本函数的名字。

最后,在通用功能完成之后,您能够添加class xsl:attributes 并在 STYLE 或 CSS 中添加相关的classNames 得到您想要的外观。

这个例子为在部署 Web 数据解决方案中用到的 File-Folder-Field 视图创建了一个基础。访问 MSDN 找到更多有关Microsoft 的 XML 规范的信息。

 

喜欢本文,那就收藏到:

    Del.icio.us Google书签 Digg Live Bookmark Technorati Furl Yahoo书签 Facebook 百度搜藏 新浪ViVi 365Key网摘 天极网摘 和讯网摘 博拉网 POCO网摘 添加到饭否 QQ书签 Digbuzz我挖网
相关评论  我也要评论
还没有关于此文章的相关评论!
  • 昵称: (为空则显示guest)
  • 评论分数: ★ ★ ★★★ ★★★★ ★★★★★
  • 评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
  • 导航
    赞助商
    文章类别
    订阅