多表数据(学生表、初中成绩表及高中成绩表)输出XML格式

本文介绍了一种方法,通过SQL查询从学生表、初中成绩表及高中成绩表获取数据,并将这些数据转换为XML格式进行输出。此过程涉及创建多个SQL数据适配器填充数据集,再使用XML文档对象模型构建XML结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 [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;
        }

某学校拟使用XML文件制定一个学生(含已毕业学生)信息文档,该文档描述其学校内学生的管理信息。 1、 选用合适的编辑器,编写一个XML文件,应至少包括下述信息内容: 学生目录下应该包括: (1) 所有学生的共有信息:班级的名字、专业、类别等 (2) 学生 学生1 学生基本信息(学生姓名、性别、学号、年龄) 入学信息(入学时间、辅导员名) 班级内学生生源信息( 生源1:(生源地名称、联系方式等信息) 生源2: 生源n: ) 毕业信息(毕业时间、毕业数量、辅导员名) 学生2 学生3 。。。。。 学生N (3)辅导员 辅导员1(辅导员姓名、联系 方式、职位、管理的班级名) 辅导员2 2、针对该XML文件,画出其相应的树状结构图。 3、针对所编写XML文件,编写其相应的DTD文件,并使用解析器验证其有效性,对验证结果抓图。 4、针对所编写XML文件,编写合适的XSL文件,将学生基本信息打印成格,并用ie浏览器进行浏览并截图。 5、使用JAVA编程语言,对XML文件进行解析: 显示该xml文件的所有节点、属性的名字; 同时显示该xml文件所有标记的文本数据; 计算学生的入学平均年龄并进行输出。 要求:1)xml文件中应该包括文本内容、标记、属性、命名空间,混合标记等的内容 2)dtd文件应该有相应的结果抓图 3)xsl文件应用到规范中的常用技巧,例如模板调用、for-each、value-of、xsl标记等。 4)解析器结果应该有抓图。 5)形成的代码交老师验证。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值