2010/07/28

[ASP.NET] XML 與 XSL 的操作

users.xml 的內容如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?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 的內容如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?xmlversion="1.0"encoding="utf-8"?>
<xsl:stylesheet version="1.0"
  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 控制項:
    1
    2
    <asp:Xml ID="Xml1" runat="server" DocumentSource="users.xml"
      TransformSource="userHtml.xslt"></asp:Xml>
    此做法只要寫好 xml 與 xslt 檔就可自動進行轉換.
  2. 如果 xml 檔案或 xslt 檔案並不在網站的目錄下, 可以用這個方式 :
    Step1. 在網頁中加入一個 Literal 控制項, 例如:
    1
    <asp:Literal ID="Literal1" runat="server"></asp:Literal>
    Step2. 在程式中撰寫 xml 與 xslt 檔的轉換, 如下:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    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 網站.

沒有留言: