多表數據(學生表、初中成績表及高中成績表)輸出XML格式

 [WebMethod(Description = "學生表、初中成績表及高中成績表輸出XML格式")]
        public XmlDocument xd_GetM_Grade()
        {
            //學生表信息查詢
            string MySelectStr_1 = "select Sname, Sage, Ssex from dbo.Student order by Sname";
            //初中成績查詢
            string MySelectStr_2 = "select Name,Course, Score from dbo.Mid_score m, Student s where m.Name=s.Sname  order by s.Sname";
            //高中成績查詢
            string MySelectStr_3 = "select Name, Course, Score from  dbo.High_score h,Student s where h.Name=s.Sname  order by s.Sname";
            GetSQLData dt1 = new GetSQLData();
            GetSQLData dt2 = new GetSQLData();
            GetSQLData dt3 = new GetSQLData();
            DataSet ds = new DataSet();
            //調用獲得table的類
            ds.Tables.Add(dt1.GetSqlData(MySelectStr_1));
            ds.Tables.Add(dt2.GetSqlData(MySelectStr_2));
            ds.Tables.Add(dt3.GetSqlData(MySelectStr_3));

            #region 創建一個GetSQLData類後,免寫
            //SqlConnection MyConn = new SqlConnection(ConfigurationManager.AppSettings["testconnStr"]);
            //DataTable dt1 = new DataTable();
            //DataTable dt2 = new DataTable();
            //DataTable dt3 = new DataTable();
            //SqlDataAdapter sda = new SqlDataAdapter(MySelectStr_1, MyConn);
            //SqlDataAdapter sda2 = new SqlDataAdapter(MySelectStr_2, MyConn);
            //SqlDataAdapter sda3 = new SqlDataAdapter(MySelectStr_3, MyConn);
            //sda.Fill(dt1);
            //sda2.Fill(dt2);
            //sda2.Fill(dt3);
            //ds.Tables.Add(dt1);
            //ds.Tables.Add(dt2);
            //ds.Tables.Add(dt3);
            #endregion

            XmlDocument xd = new XmlDocument();
            //加入XML的聲明段落,<?xml version="1.0" encoding="gb2312"?>
            XmlDeclaration xmldecl = xd.CreateXmlDeclaration("1.0", "utf-8", null);
            xd.AppendChild(xmldecl);
            //添加根元素
            XmlElement xmle = xd.CreateElement("", "Student", "");
            xd.AppendChild(xmle);

            //尋找根元素
            XmlNode root = xd.SelectSingleNode("Student");

            //判斷表是否有數據
            if (ds.Tables[0].Rows.Count > 0)
            {
                //讀取該表每行信息
                for (int nI = 0; nI < ds.Tables[0].Rows.Count; nI++)
                {
                    //添加根元素xmle下的第一層子元素xeRow
                    XmlElement xeRow = xd.CreateElement("Student");
                    //讀取該表每列信息
                    for (int nC = 0; nC < ds.Tables[0].Columns.Count; nC++)
                    {
                        //判斷改列是否爲空,若不爲空,則寫入xml中
                        if (ds.Tables[0].Rows[nI][nC].ToString() != null && ds.Tables[0].Rows[nI][nC].ToString() != "" && ds.Tables[0].Rows[nI][nC].ToString() != "“" + "”")
                        {
                            //添加xeRow的屬性及值
                            xeRow.SetAttribute(ds.Tables[0].Columns[nC].ColumnName.ToString(), ds.Tables[0].Rows[nI][nC].ToString());
                            root.AppendChild(xeRow);
                        }
                    }
                    #region 第一個子元素初中成績單
                    //添加子元素xeRow的子元素xeRow2
                    XmlElement xeRow2 = xd.CreateElement("初中成績");
                    xeRow.AppendChild(xeRow2);

                    //判斷表是否有數據
                    if (ds.Tables[1].Rows.Count > 0)
                    {
                        for (int nI2 = 0; nI2 < ds.Tables[1].Rows.Count; nI2++)
                        {
                            //判斷該同學是否有成績,若有則寫入xml
                            if (ds.Tables[1].Rows[nI2][0].ToString().Trim() == ds.Tables[0].Rows[nI][0].ToString().Trim())
                            {
                                for (int nC2 = 1; nC2 < ds.Tables[1].Columns.Count; nC2++)
                                {
                                    XmlElement xeRow2_1 = xd.CreateElement(ds.Tables[1].Columns[nC2].ColumnName.ToString());
                                    xeRow2_1.InnerText = ds.Tables[1].Rows[nI2][nC2].ToString();
                                    xeRow2.AppendChild(xeRow2_1);
                                }
                            }
                        }
                    }
                    //判斷是否含有子元素
                    if (!xeRow2.HasChildNodes)
                    {
                        mgs(xeRow2);
                    }                        
                    #endregion
                    #region 第二個子元素高中成績單

                        //添加子元素xeRow的子元素xeRow3
                        XmlElement xeRow3 = xd.CreateElement("高中成績");
                        xeRow.AppendChild(xeRow3);

                        //判斷表是否有數據
                        if (ds.Tables[2].Rows.Count > 0)
                        {
                            for (int nI2 = 0; nI2 < ds.Tables[2].Rows.Count; nI2++)
                            {
                                //判斷該同學是否有成績,若有則寫入xml
                                if (ds.Tables[2].Rows[nI2][0].ToString().Trim() == ds.Tables[0].Rows[nI][0].ToString().Trim())
                                {
                                    for (int nC2 = 1; nC2 < ds.Tables[2].Columns.Count; nC2++)
                                    {
                                        XmlElement xeRow3_1 = xd.CreateElement(ds.Tables[2].Columns[nC2].ColumnName.ToString());
                                        xeRow3_1.InnerText = ds.Tables[2].Rows[nI2][nC2].ToString();
                                        xeRow3.AppendChild(xeRow3_1);
                                    }
                                }
                            }
                        }
                        if (!xeRow3.HasChildNodes)
                        {
                            mgs(xeRow3);
                        }      
                        
                        #endregion
                    }
                }
                xd.AppendChild(xmle);
            return xd;
        }

        //返回字符串"該同學無***成績"
        public string mgs(XmlElement xe)
        {
            return xe.InnerText = "該同學無"+xe.Name;
        }

發佈了22 篇原創文章 · 獲贊 6 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章