当前位置:首页>网络学院>程序开发>XML教程>文章内容

巧妙利用XSLT将XML数据转换成HTML

[ 来源:www.it55.com | 作者: | 时间:2007-07-14 | 收藏 | 推荐 ] 【

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

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



<?xml version='1.0'?><?xml-stylesheet type="text/xsl" href="http://edu.iecool.com/show/article.xsl"?><xml>    <folders>        <folder>            <text>Folder 1</text>            <files>                <file>                    <text>File 1</text>                    <fields>                        <field>                            <data>                                <type>string</type>                                <length>50</length>                                <value>some data</value>                            </data>                        </field>                    </fields>                </file>            </files>        </folder>    </folders></xml> 

http://www.it55.com/



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


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


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


<?xml version="1.0"?><xsl:stylesheet    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"><xsl:output method="html"/><msxsl:script language="JScript" implements-prefix="fn">    function getElementCount(nodelist, what) {        var rtrn = 0;        rtrn = nodelist[0].parentNode.selectNodes(what).length;        return (rtrn + 1); //1 is added for filler TD    }</msxsl:script><xsl:template match="/"><TABLE CELLSPACING="0" CELLPADDING="0"    WIDTH="100%" BORDER="0" ID="tblRoot" NAME="tblRoot"    style="table-layout:fixed;">    <TR>        <xsl:for-each select="xml/folders/folder">        <xsl:element name="TD">            <xsl:attribute name="style">width:55px</xsl:attribute>            <xsl:value-of select="text"/>        </xsl:element>        </xsl:for-each>        <TD> </TD>    </TR>    <xsl:for-each select="xml/folders/folder">    <TR>        <xsl:element name="TD">            <xsl:attribute name="colspan">                <xsl:value-of select="fn:getElementCount(., 'folder')"/>            </xsl:attribute>                            <TABLE CELLSPACING="0" CELLPADDING="0"                WIDTH="100%" BORDER="0" style="table-layout:fixed;">                <TR>                    <xsl:for-each select="files/file">                    <xsl:element name="TD">                        <xsl:attribute name="style">width:55px;</xsl:attribute>                        <xsl:value-of select="text"/>                    </xsl:element>                    </xsl:for-each>                    <TD> </TD>                </TR>                <xsl:for-each select="files/file">                    <TR>                        <xsl:element name="TD">                            <xsl:attribute name="colspan">                                <xsl:value-of select="fn:getElementCount(., 'file')"/>                            </xsl:attribute>                        <xsl:for-each select="fields/field">                        <xsl:element name="INPUT">                            <xsl:attribute name="type">text</xsl:attribute>                            <xsl:attribute name="maxlength">                                <xsl:value-of select="data/length"/>                            </xsl:attribute>                            <xsl:attribute name="value">                                <xsl:value-of select="data/value"/>                            </xsl:attribute>                        </xsl:element><BR/>                        </xsl:for-each>                        </xsl:element>                    </TR>                </xsl:for-each>            </TABLE>        </xsl:element>    </TR>    </xsl:for-each></TABLE></xsl:template></xsl:stylesheet> 

www.it55.com

(编辑:IT资讯之家 www.it55.com

返回顶部
共2页: 上一页 1 [2] 下一页  

网友评论

[以下评论为网友观点,不代表本站。请自觉遵守互联网相关政策法规,所有连带责任均有评论者自负。]
[不超过250字]

图片文章