您好,欢迎访问一九零五行业门户网

详细介绍将XML数据转换成HTML的示例代码

使用一个简单的xsl样式表就可以将xml数据转换成html。随着xml规范的不断演进,在新的版本中满足每个人的需要似乎已经成为必要;假设有一个表示一个页面内容的xml数据,现在想将其内容转换成布局。下面是想要转换的xml: 
85fa80ee361e700c2be4d997bc9733c9  31fe81e98afd17e4b9a8a28bedee1cf1  b2a0af5a8fd26276da50279a1c63a57a  254d0476a3bbaede07403c5f35da3e25  59ef88518edd60e9f6a2c9f2c966ac0c  28f128881ce1cdc57a572953e91f7d0ffolder1273e21371c5d5e701d3c98517a0bfa41  c6a235960c38d509b87ca752283a5cb2  28897b20adb25fbae118a3f80f538dec  28f128881ce1cdc57a572953e91f7d0ffile1273e21371c5d5e701d3c98517a0bfa41  5d31de15119673d8345a6e7e4e3539c8  d737d0a06790df603d79bb2c76c86712  1d029f6197b5a3eb8a3fdf0a088ddf55  7674b22ef33c73b930516fd6bc30b7a3string47da3aec5fea7de36e415e6398f16561  d82af2074b26fcfe177e947839b5d381500a47fdba4028b9e1b40fb76257dcf69f  8487820b627113dd990f63dd2ef215f3somedata4b175f9a50d57c75316becd702e959dc  07b4fdd0136efc154b4b9d48cfcbbb9d  6d2ce49320ba9a8e638019ef6c9bc2ef  7e3a30f0b0961b04563491c9888611a7  a83812d91bc3e67c6d4248fcc5008811  917d3984ce33e8bdef33749ba625760b  506346dddbef7ce31b7ff0aa13ddacdf  c1a7601f3a9fa679b3cd6fdf4f6dbe8d  21118965b89073f60271ef4a3b5d3c58
这个内容表示一组文件夹、文件和域。每个文件夹包含文件,每个文件包含用于输入数据的域。文件夹组中的每个文件夹都将表现为一个 table 的第一行的一个 tr 元素和一个 td 元素。文件组中的每个文件都将表示为嵌套在文件夹 tr 元素中的一个 table 元素的第一行的一个 tr 元素和一个 td 元素。域组中的每个域都将在相关的文件中表现为一个 input。 
下面是用于这个转换的 xsl: 
<?xmlversion="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:outputmethod="html"/> <msxsl:scriptlanguage="jscript"implements-prefix="fn"> functiongetelementcount(nodelist,what){ varrtrn=0; rtrn=nodelist[0].parentnode.selectnodes(what).length; return(rtrn 1);//1isaddedforfillertd } </msxsl:script> <xsl:templatematch="/"> <tablecellspacing="0"cellpadding="0" width="100%"border="0"id="tblroot"name="tblroot" style="table-layout:fixed;"> <tr> <xsl:for-eachselect="xml/folders/folder"> <xsl:elementname="td"> <xsl:attributename="style">width:55px</xsl:attribute> <xsl:value-ofselect="text"/> </xsl:element> </xsl:for-each> <td></td> </tr> <xsl:for-eachselect="xml/folders/folder"> <tr> <xsl:elementname="td"> <xsl:attributename="colspan"> <xsl:value-ofselect="fn:getelementcount(.,'folder')"/> </xsl:attribute> <tablecellspacing="0"cellpadding="0" width="100%"border="0"style="table-layout:fixed;"> <tr> <xsl:for-eachselect="files/file"> <xsl:elementname="td"> <xsl:attributename="style">width:55px;</xsl:attribute> <xsl:value-ofselect="text"/> </xsl:element> </xsl:for-each> <td></td> </tr> <xsl:for-eachselect="files/file"> <tr> <xsl:elementname="td"> <xsl:attributename="colspan"> <xsl:value-ofselect="fn:getelementcount(.,'file')"/> </xsl:attribute> <xsl:for-eachselect="fields/field"> <xsl:elementname="input"> <xsl:attributename="type">text</xsl:attribute> <xsl:attributename="maxlength"> <xsl:value-ofselect="data/length"/> </xsl:attribute> <xsl:attributename="value"> <xsl:value-ofselect="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 元素,然后将它的值设置为脚本函数的名字。 
 最后,在通用功能完成之后,你可以添加class xsl:attributes 并在 style 或 css 中添加相关的classnames 得到你想要的外观。 
 这个例子为在部署 web 数据解决方案中用到的 file-folder-field 视图创建了一个基础。访问 msdn 找到更多有关microsoft 的 xml 规范的信息。
以上就是详细介绍将xml数据转换成html的示例代码的详细内容。
其它类似信息

推荐信息