html转换xml:将XML数据转换成HTML的方法来源: 发布时间:星期四, 2009年2月12日 浏览:111次 评论:0
使用个简单XSL样式表就可以将XML数据转换成HTML随着XML规范标准不断演进在新版本中满足每个人需要似乎已经成为必要;假设有个表示个页面内容XML数据现在想将其内容转换成布局下面是想要转换XML: <?xml version='1.0'?> <?xml-stylesheet type="text/xsl" href="article.xsl"?> <xml> <folders> <folder> <text>Folder 1</text> <files> <file> <text>File 1</text> <fields> <field> <data> <type></type> <length>50</length> <value>some data</value> </data> </field> </fields> </file> </files> </folder> </folders> </xml> 这个内容表示组文件夹、文件和域每个文件夹包含文件每个文件包含用于输入数据域文件夹组中每个文件夹都将表现为个 TABLE 第行个 TR 元素和个 TD 元素文件组中每个文件都将表示为嵌套在文件夹 TR 元素中个 TABLE 元素第行个 TR 元素和个 TD 元素域组中每个域都将在相关文件中表现为个 INPUT 下面是用于这个转换 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.aaa.com/aaa> <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; (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> 在 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 转换样最后步骤是添加每个文件中域 旦完成了通用布局就可以开始添加用户界面功能了比如说隐藏掉其它文件夹和文件行直到用户点击了相关选项卡这功能可以通过编写支持这功能脚本来实现添加个 onclick xsl:attribute 元素到文件夹和文件 TD 元素然后将它值设置为脚本名字 最后在通用功能完成的后你可以添加 xsl:attributes 并在 STYLE 或 CSS 中添加相关Names 得到你想要外观 这个例子为在部署 Web 数据解决方案中用到 File-Folder-Field 视图创建了个基础访问 MSDN 找到更多有关Microsoft XML 规范标准信息 0
相关文章读者评论发表评论 |