xml格式化後轉化為html

來源:互聯網
上載者:User
    由於項目的需要,最近學習了XLST和xml向html的轉變。
    XML文檔的終極目標就是做為一個資訊的基本類型來儲存資訊,載被轉化為不同的格式來用於各種應用。W3C提出了擴充樣式語言規範來實現上述的目的。XSLT(the eXtensible Stylesheet Language Transformation)既是用於XML文本的轉化和格式化的標準語言。現面用一個簡單的例子來說明XML檔案是如何格式化後轉化為和HTML的。
    以下是XML檔案的一部分。描述了資料庫中的實體:
<?xml version="1.0" encoding="utf-8" ?
<Entities>
  <Entity title="公司客戶" name="Company" module="Users">
    <Item title="名稱" name="Name" type="text"/>
    <Item title="編號" name="Number" type="text" property="get"/>
    <Item title="經理" name="Manage" type="text"/>
    <Item title="電話" name="Phone" type="text"/>
    <Item title="連絡人" name="Linkman" type="text"/>
    <Item title="地址" name="Address" type="text"/>
    <Item title="傳真" name="Fax" type="text" require="false"/>
  </Entity>
  <Entity title="使用者" name="User" module="Users">
    <Item title="電子郵箱" name="Email" type="text"/>
    <Item title="密碼" name="Password" type="text"/>
    <Item title="消費總額" name="TotalConsumption" type="int"/>
    <Item title="真實姓名" name="Name" type="text" require="false"/>
    <Item title="公司" name="Company" type="entity" entityName="Company" require="false"/>
  </Entity>
  <Entity title="使用者地址" name="UserAddress" module="Users">
    <Item title="使用者" name="User" type="entity" entityName="User" />
    <Item title="地址" name="Address" type="text" />
    <Item title="電話" name="Phone" type="text"/>
    <Item title="是否是預設" name="IsDefault" type="bool" />
  </Entity>
</Entities>
 我現在想做的就是將xml檔案轉化為表格的形式,是實體及屬效能過比較直觀的表現出來。下面是對應這個XML檔案的XLST:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
>
  <xsl:template match="/">
    <html>
      <body>
        <h2 align="center">
          短途餐飲物流平台實體資料分析<br />
        </h2>
        <xsl:apply-templates select="Entities/Entity"/>//對Entity節點應用模板
      </body>
    </html>
  </xsl:template>
//Entity節點所對應的模板
  <xsl:template match="Entity ">
    <b>
      <font color="bisgue">
        <xsl:value-of select="@title"/>(<xsl:value-of select="@name"/>)資料分析:
      </font>
      <br />
    </b>

    <table width="70%" bordercolor="black" border="1">
      <tr align="center"  style="background-color:White;">
        <th width="20%" >資料名稱</th>
        <th width="20%">代碼</th>
        <th width="20%">類型</th>
        <th width="20%">是否可以為空白</th>
        <th>描述</th>
      </tr>
      <xsl:for-each select="Item">//對節點的批量處理,他與元素xsl:apply-templates是兩種不同的方法但輸出的結果是想通的。
    <tr align="center">
         <td>
            <xsl:value-of select="@title"/>
          </td>
          <td>
            <xsl:value-of select="@name"/>
          </td>
          <td>
            <xsl:value-of select="@type"/>
          </td>
          <td>
            <xsl:apply-templates select="@require"/>
            <xsl:if test="not(@require)">//判斷是否存在某個節點,用函數not(欲判斷的節點)
              否
            </xsl:if>
          </td>
          <td>
            <xsl:value-of select="(@description)"/>
            <xsl:if test="not(@description)">
              null
            </xsl:if>
          </td>
        </tr>
      </xsl:for-each>
    </table>
    <br />
  </xsl:template>
  <xsl:template match="@require">
    是
  </xsl:template>
</xsl:stylesheet>

以下是XML檔案在應用到xlst後輸出的格式


公司客戶(Company)資料分析:

資料名稱 代碼 類型 是否可以為空白 描述
名稱 Name text null
編號 Number text null
經理 Manage text null
電話 Phone text null
連絡人 Linkman text null
地址 Address text null
傳真 Fax text null

使用者(User)資料分析:

資料名稱 代碼 類型 是否可以為空白 描述
電子郵箱 Email text null
密碼 Password text null
消費總額 TotalConsumption int null
真實姓名 Name text null
公司 Company entity null

使用者地址(UserAddress)資料分析:

資料名稱 代碼 類型 是否可以為空白 描述
使用者 User entity null
地址 Address text null
電話 Phone text null
是否是預設 IsDefault bool null

下面代碼將XML檔案轉化為和HTML檔案:
/// <summary>
        ///將xml轉化為html
        /// </summary>
        /// <param name="XmlPath">xml檔案路徑</param>
        /// <param name="XslFilePath">xslt檔案路徑</param>
        /// <param name="htmlFilePath">聲稱的html檔案路徑</param>
        public static void XmlTransToHtml(string xmlPath, string xslFilePath, string htmlFilePath)
        {
            //產生Html檔案路徑
            string HtmlFilePath = htmlFilePath;
            XPathDocument myXPathDoc = new XPathDocument(xmlPath);
            XslCompiledTransform myXslTrans = new XslCompiledTransform();
            //載入XSL檔案
            myXslTrans.Load(xslFilePath);
            XmlTextWriter myWriter = new XmlTextWriter(HtmlFilePath, System.Text.Encoding.Default);
            myXslTrans.Transform(myXPathDoc, null, myWriter);
            myWriter.Close();
        }
在測試類別中調用這個方法,運行測試就會得到我們需要的html檔案。(編譯環境 vs.net 2008)。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.