DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> XML學習教程 >> XML詳解 >> 利用XML配置實體列表
利用XML配置實體列表
編輯:XML詳解     

 XML的好處自然有很多,在軟件中用XML可以讓軟件方便的實現多語言版,在數據傳輸中它能夠以很好的組織結構交換信息,同時利用xpath可以方便的解析,在持久化中它能很好的描述業務數據……

  本文主要講通過讀取XML配置實現對不同數據實體的統一處理,生成表現table,當然生成div也是可以的。以table為例。

  代碼中沒有進行異常處理,請見諒,只是寫出了思路!

  XML文件:

<?XML version="1.0" encoding="utf-8" ?>
<ListConfig>
  <!-- 項目table的模板一     type標識模板,attribute定義table或者td的屬性,name與數據表的列名對應 -->
  <Project type="0" attribute="width='100%'">
    <Column name="Sort" attribute="width='35'">類別</Column>
    <Column name="ProjectName" attribute="width='100'">項目名稱</Column>
    <Column name="StudentNum" attribute="width='40'">學號</Column>
    <Column name="Teacher" attribute="width='30'">老師</Column>
    <Column name="TeacherDuty" attribute="width='100'">老師責任</Column>
  </Project>
  <!-- 項目table的模板二 -->
  <Project type="1" attribute="">
    <Column name="Sort" attribute="width='35'">類別</Column>
    <Column name="ProjectName" attribute="width='100'">項目名稱</Column>
    <Column name="StudentNum" attribute="width='40'">學號</Column>
    <Column name="Teacher" attribute="width='30'">老師</Column>
    <Column name="TeacherDuty" attribute="width='100'">老師責任</Column>
    <Column name="EduLevel" attribute="width='100'">教育程度</Column>
  </Project>
  <!-- 項目table的模板三 -->
  <Project type="2" attribute="">
    <Column name="ProjectName" attribute="width='100'">項目名稱</Column>
    <Column name="StudentNum" attribute="width='40'">學號</Column>
    <Column name="Teacher" attribute="width='30'">老師</Column>
  </Project>
  <Article type="0" attribute="">
    <Column name="Title" attribute="">標題</Column>
    <Column name="Content" attribute="">內容</Column>
    <Column name="Author" attribute="">作者</Column>
    <Column name="ComeFrom" attribute="">來源</Column>
  </Article>
</ListConfig>

 Code:

    public class ConstructEntityList<T> where T : class, new()
    {
        private Type tType;
        private XmlDocument document = new XMLDocument();
        public ConstructEntityList()
        {   
            //獲得要生成的列表對應的實體類型
            tType = typeof(T);
            //加載配置文件
            document.Load(@"D:\PracticeAndTeach\PracticeAndTeach\PATWebSite\Component\ListConfig.XML");
        }
        /**//// <summary>
        /// 獲得實體列表table
        /// </summary>
        /// <param name="iqueryable">轉換源</param>
        /// <param name="type">模板類型</param>
        /// <returns>table</returns>
        public string GetEntityListString(IQueryable<T> iqueryable, object type)
        {
            //得到模板的列元素
            XMLNodeList list = document.SelectNodes(string.Format("/ListConfig/{0}[@type={1}]/Column",tType.Name, Convert.ToInt32(type)));
            StringBuilder listBuilder = new StringBuilder();
            //構造table的表頭,並且設置table的屬性
            listBuilder.AppendFormat("<table {0} ><tr>",
                document.SelectSingleNode(string.Format("/ListConfig/{0}[@type={1}]",tType.Name, Convert.ToInt32(type))).Attributes.GetNamedItem("attribute").Value);
            for (int i = 0; i < list.Count; i++)
            {
                listBuilder.AppendFormat("<td {1}>{0}</td>", list.Item(i).InnerText, list.Item(i).Attributes.GetNamedItem("attribute").Value);
            }
            listBuilder.Append("</tr>");
            PropertyInfo info;
           //遍歷數據源,通過XML配置文件得到需要讀取的實體屬性,利用反射得到屬性值
            foreach (T t in iqueryable)
            {
                listBuilder.Append("<tr>");
                for (int i = 0; i < list.Count; i++)
                {
                    info = tType.GetProperty(list.Item(i).Attributes.GetNamedItem("name").Value);
                    listBuilder.AppendFormat("<td>{0}</td>", info.GetValue(t, null));
                }
                listBuilder.Append("</tr>");
            }
            listBuilder.Append("</table>");
            return listBuilder.ToString();
        }
    }

  應用:

  調用第一種XML配置

  new ConstructEntityList<Project>().GetEntityListString((from s in patDataContext.Projects select s), ProjectList.Default);

  結果:利用XML配置實體列表利用XML配置實體列表

  查看原圖(大圖)

  調用第二種XML配置

  new ConstructEntityList<Project>().GetEntityListString((from s in patDataContext.Projects select s), ProjectList.More);

  結果:

利用XML配置實體列表

  查看原圖(大圖)

  好處:不需要修改源代碼,通過對XML配置文件的修改就可以實現table列表值的改變

  場景:在項目管理系統中對於普通用戶只需要看到項目名稱,項目概述,負責人;對於管理者需要看到項目名稱,項目概述,負責人,項目進度,項目成果;哪麼我們只需要對不同情況定制一個xml塊,生成列表時只要指定實用那個XML塊哪麼顯示內容自動改變。


XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved