電子公文解析Sample – ASP.NET (C#)

  • 5549
  • 0
  • 2012-05-29

電子公文是指製作與公務相關之公文書,用於機關間往來交換資訊之文件。
而公文類別則分為「令」、「呈」、「咨」、「函」、「公告」及「其他公文」6種。

電子公文是指製作與公務相關之公文書,用於機關間往來交換資訊之文件。

而公文類別則分為「令」、「呈」、「咨」、「函」、「公告」及「其他公文」6種。

參考自 : 公文e網通

 

我們在這利用 ASP.NET 來試作個簡單應用

1) 首先建立 [電子公文Sample] 方案

使用 [ASP.NET Web 應用程式] 範本

image

2) 利用 XML 建立類別宣告

參考 : XML序列化與反序列化

a. 首先將取得的 93_2.di 置入本方案中, 並更名為 93_2.xml

image

a. 因手邊未取得 DTD 及相關參照資料… 故先將 <!DOCTYPE… 用 <!-- --> 註解起來

b. 再開啟 Visual Studio Command Prompt (2010)

image

c. 切換到方案目錄下, 輸入如下列

D:\電子公文Sample\電子公文Sample>xsd 93_2.xml
D:\電子公文Sample\電子公文Sample>xsd 93_2.xsd /Classes

來建立 XML 的類別宣告

image

d. 並將建立後的 xsd( XML Schema Definition ) 及 cs ( 本方案用 XML 函式庫 ) 檔置入方案中

image

f. 開啟 [93_2.xsd] 即可看到如下列的圖型化的 XML 綱要定義,

圖型化的顯示可以方便我們進行簡單的分析及資料拆解…

image

3) 設計網頁介面

在這邊只是簡單的拉了兩個控制項

資料輸入FileUpload 類別 

資料呈現 Literal 類別

image

image

頁面 Tag

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="電子公文Sample._Default" %>

		
		
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        上傳 di 檔<br />
        <asp:FileUpload ID="FileUpload1" runat="server" />
        <asp:Button ID="Button1" runat="server" Text="解析" OnClick="Button1_Click" />
        <br />
        解析顯示如下<br />
        <asp:Literal ID="Literal1" runat="server"></asp:Literal>
    </div>
    </form>
</body>
</html>

後端 Source Code (C#)

參考 : Saving and Loading Data: XmlSerializer

using System;
using System.IO;
using System.Text;
using System.Web.UI.WebControls;
using System.Xml.Serialization;

		
		
namespace 電子公文Sample
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
        }

		
		
        protected void Button1_Click(object sender, EventArgs e)
        {
            FileUpload FUpload = FindControl("FileUpload1") as FileUpload;
            StreamReader SReader = new StreamReader(FUpload.PostedFile.InputStream, Encoding.Default);
            XmlSerializer serializer = new XmlSerializer(typeof(函));
            函 _函 = serializer.Deserialize(SReader) as 函;

		
		
            StringBuilder SB = new StringBuilder();
            SB.Append("函<br/>");
            SB.Append("|發文機關<br/>");
            SB.Append("|─全銜 = " + _函.發文機關[0].全銜.ToString() + "<br/>");
            SB.Append("|─發文機關 = " + _函.發文機關[0].機關代碼.ToString() + "<br/>");
            SB.Append("|函類別<br/>");
            SB.Append("|─代碼 = " + _函.函類別[0].代碼.ToString() + "<br/>");
            SB.Append("|地址 = " + _函.地址.ToString() + "<br/>");
            SB.Append("|聯絡方式<br/>");
            for (int i = 0; i < _函.聯絡方式.Length; i++)
            {
                SB.Append("|─ " + _函.聯絡方式[i].Value.ToString() + "<br/>");
            }
            SB.Append("|受文者<br/>");
            SB.Append("|─全銜 = " + _函.受文者[0].全銜.ToString() + "<br/>");
            SB.Append("|─含附件 = " + _函.受文者[0].含附件.ToString() + "<br/>");
            SB.Append("|─機關代碼 = " + _函.受文者[0].機關代碼.ToString() + "<br/>");
            SB.Append("|發文日期<br/>");
            SB.Append("|─年月日 = " + _函.發文日期[0].年月日.ToString() + "<br/>");
            SB.Append("|發文字號<br/>");
            SB.Append("|─文號<br/>");
            SB.Append("|─文號.年度 = " + _函.發文字號[0].文號[0].年度.ToString() + "<br/>");
            SB.Append("|─文號.流水號 = " + _函.發文字號[0].文號[0].流水號.ToString() + "<br/>");
            SB.Append("|─字 = " + _函.發文字號[0].字.ToString() + "<br/>");
            SB.Append("|速別<br/>");
            SB.Append("|─代碼 = " + _函.速別[0].代碼.ToString() + "<br/>");
            SB.Append("|密等及解密條件或保密期限<br/>");
            SB.Append("|密等 = " + _函.密等及解密條件或保密期限[0].密等.ToString() + "<br/>");
            SB.Append("|解密條件或保密期限 = " + _函.密等及解密條件或保密期限[0].解密條件或保密期限.ToString() + "<br/>");
            SB.Append("|附件<br/>");
            SB.Append("|─文字 = " + _函.附件[0].文字.ToString() + "<br/>");
            SB.Append("|─附件檔名 = " + _函.附件[0].附件檔名.ToString() + "<br/>");
            SB.Append("|主旨<br/>");
            SB.Append("|─文字 = " + _函.主旨[0].文字.ToString() + "<br/>");
            SB.Append("|段落<br/>");
            SB.Append("|─段名 = " + _函.段落[0].段名.ToString() + "<br/>");
            SB.Append("|─文字 = " + _函.段落[0].文字.ToString() + "<br/>");
            SB.Append("|正本<br/>");
            SB.Append("|─全銜 = " + _函.正本[0].全銜.ToString() + "<br/>");
            SB.Append("|署名 = " + _函.署名.ToString() + "<br/>");

		
		
            Literal Show = FindControl("Literal1") as Literal;

		
		
            Show.Text = SB.ToString();
        }
    }
}

即簡單的設計出公文資料解析介面

輸入 :

image

輸出 :

image