使用XSLT將XML數(shù)據(jù)轉(zhuǎn)換成HTML_Xml教程

      編輯Tag賺U幣
      教程Tag:暫無(wú)Tag,歡迎添加,賺取U幣!

      推薦:XML輕松學(xué)習(xí)手冊(cè)(5)XML實(shí)例解析
      第五章:XML實(shí)例解析 XML在不同領(lǐng)域有著廣泛的應(yīng)用,比如在科技領(lǐng)域的MathML,無(wú)線通信應(yīng)用的WML,在網(wǎng)絡(luò)圖象方面的SVG等等,我們這里側(cè)重討論XML在web上的應(yīng)用。XML在web上應(yīng)用主要是利用其

      使用一個(gè)簡(jiǎn)單的 XSL 樣式表就可以將 XML 數(shù)據(jù)轉(zhuǎn)換成 HTML。隨著 XML 規(guī)范的不斷演進(jìn),在新的版本中滿足每個(gè)人的需要似乎已經(jīng)成為必要;不幸的是,進(jìn)行簡(jiǎn)單的轉(zhuǎn)換一直都困擾著規(guī)范。

      假設(shè)我有一個(gè)表示一個(gè)頁(yè)面內(nèi)容的 XML 數(shù)據(jù),現(xiàn)在我想將其內(nèi)容轉(zhuǎn)換成布局。下面是我想要轉(zhuǎn)換的 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>string</type>
      <length>50</length>
      <value>some data</value>
      </data>
      </field>
      </fields>
      </file>
      </files>
      </folder>
      </folders>
      </xml>

      這個(gè)內(nèi)容表示一組文件夾、文件和域。每個(gè)文件夾包含文件,每個(gè)文件包含用于輸入數(shù)據(jù)的域。文件夾組中的每個(gè)文件夾都將表現(xiàn)為一個(gè) TABLE 的第一行的一個(gè) TR 元素和一個(gè) TD 元素。文件組中的每個(gè)文件都將表示為嵌套在文件夾 TR 元素中的一個(gè) TABLE 元素的第一行的一個(gè) TR 元素和一個(gè) TD 元素。域組中的每個(gè)域都將在相關(guān)的文件中表現(xiàn)為一個(gè) INPUT。

      為了實(shí)現(xiàn)這一想法,我們需要將遍歷 XML 然后根據(jù)XSL 構(gòu)建一個(gè)表。

      下面是用于這個(gè)轉(zhuǎn)換的 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">
      &

      分享:用ASP XML打造留言本
      一、讀者指引 讀者指引幫助你掌握本文的梗概。以免你看了大半才明白這編文章不適合你,給你造成視覺(jué)污染。 如果你正在用ASP XML寫(xiě)一些程序,或者你正在學(xué)XML那就值得一看。 閱讀

      共2頁(yè)上一頁(yè)12下一頁(yè)
      來(lái)源:模板無(wú)憂//所屬分類:Xml教程/更新時(shí)間:2008-08-22
      相關(guān)Xml教程