2010/07/28

[ASP.NET] XML 與 XSL 的操作

users.xml 的內容如下:
<?xmlversion="1.0"encoding="utf-8" ?>
<root>
  <user>
    <account>John</account>
    <name>王小明</name>
  </user>
  <user>
    <account>Mary</account>
    <name>吳阿美</name>
  </user>
  <user>
    <account>David</account>
    <name>徐丁丁</name>
  </user>
</root>

userHtml.xslt 的內容如下:
<?xmlversion="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:output method="html" indent="no"/> 
  <xsl:template match="/root"> 
    <table border="1"> 
      <tr style="background-color:#FFC125"> 
        <td>帳號</td> 
        <td>姓名</td> 
      </tr> 
      <xsl:for-each select="user"> 
        <tr> 
          <td> 
            <xsl:value-of select="account"/> 
          </td> 
          <td> 
            <xsl:value-of select="name"/> 
          </td> 
        </tr> 
      </xsl:for-each> 
    </table> 
  </xsl:template> 
</xsl:stylesheet>

因為是輸出 html 的格式, 所以設定 <xsl:output method="html" indent="no"/> 的 method 為 html; indent 設定 no, 表示不要輸出編排的格式.
  1. 在 ASP.Net 中, 可以在 aspx 檔中加入 Xml 控制項:
    <asp:Xml ID="Xml1" runat="server" DocumentSource="users.xml" 
      TransformSource="userHtml.xslt"></asp:Xml>
    此做法只要寫好 xml 與 xslt 檔就可自動進行轉換.
  2. 如果 xml 檔案或 xslt 檔案並不在網站的目錄下, 可以用這個方式 :
    Step1. 在網頁中加入一個 Literal 控制項, 例如:
    <asp:Literal ID="Literal1" runat="server"></asp:Literal> 
    Step2. 在程式中撰寫 xml 與 xslt 檔的轉換, 如下:
    protected void Page_Load(object sender, EventArgs e)
    {
        XmlDocument doc = new XmlDocument();
        doc.Load("c:\\users.xml");
        XPathNavigator nav = doc.CreateNavigator();
        XslCompiledTransform trans = new XslCompiledTransform(false);
        trans.Load("c:\\userHtml.xslt");
        using (StringWriter sw = new StringWriter())
        {
            using (XmlTextWriter xmlWriter = new XmlTextWriter(sw))
            {
                trans.Transform(nav, null, xmlWriter);
                Literal1.Text = sw.ToString();
            }
        }
    }
  3. 有關 xslt 的說明, 可參考 w3schools 網站.

沒有留言: