XML与数据集相关的操作

一、XML

1、含义:(eXtensible Markup Language)可扩展标记语言

a、标记语言:计算机所能理解的信息符号

b、可扩展:计算机有通用的标记语言如HTML,标准通用的标记语言标签是规定好的,但是XML可以有相关人士自己根据需要自由定义其标签,即其可扩展性。

2、用途:传送及携带数据信息,不用来表现或展示数据。用途的焦点是 它说明数据时什么。具体展示就表现由使用它的应用程序来决定。

而HTML则用来表现数据。

3、例子

<?xml version="1.0"?>
<小纸条>
 <收件人>大元</收件人>
 <發件人>小張</發件人>
 <主題>問候</主題>
 <具體內容>早啊,飯吃了沒? </具體內容>
</小纸条>

XML序言<?xml version="1.0"?>,这一行代码会告诉解析器或浏览器这个文件应该按照XML规则进行解析。

二、XML的相关操作

1、对XML文件的节点属性修改并保存

      using System.Xml;

        XmlDocument xmlDoc = new XmlDocument();   //定义XML文件对象
        xmlDoc.Load(Server.MapPath("data.xml"));   
        XmlNodeList nodeList = xmlDoc.SelectSingleNode("Employees").ChildNodes;//获取Employees节点的所有子节点
        foreach (XmlNode xn in nodeList)//遍历所有子节点
        {
            XmlElement xe = (XmlElement)xn;//将子节点类型转换为XmlElement类型
            if (xe.GetAttribute("genre") == "李赞红")//如果genre属性值为“张三”
            {
                xe.SetAttribute("genre", "update李赞红");//则修改该属性为“update张三”
                XmlNodeList nls = xe.ChildNodes;//继续获取xe子节点的所有子节点
                foreach (XmlNode xn1 in nls)//遍历
                {
                    XmlElement xe2 = (XmlElement)xn1;//转换类型
                    if (xe2.Name == "author")//如果找到
                    {
                        xe2.InnerText = "亚胜";//则修改
                    }
                }
            }
        }
        xmlDoc.Save(Server.MapPath("data.xml"));//保存。

2、可以通过DataTable,直接将数据集转化并保存为XML文件

protected void DBToXML()
    {
        DataTable dt;
        dt = new DataTable("testli");
        dt.Columns.Add("No", typeof(string));
        dt.Columns.Add("Name", typeof(string));
        dt.Columns.Add("Age", typeof(string));
        dt.Columns.Add("Home", typeof(string));

        DataRow dr = dt.NewRow();
        dr["No"] = "2013202087";
        dr["Name"] = "Li";
        dr["Age"] = "25";
        dr["Home"] = "Shanxi";
        dt.Rows.Add(dr);
        dt.WriteXml("HiprojectWeb/testli.XML");
    }

但是这样转化过来的

<?xml version="1.0" standalone="yes"?>
<DocumentElement>
  <testli>
    <No>2013202087</No>
    <Name>Li</Name>
    <Age>25</Age>
    <Home>Shanxi</Home>
  </testli>
</DocumentElement>

根节点只能是<DocumentElement>,没有办法自定义

3、为了实现上述问题,使用了 StringBuilder(可变的字符串序列) 将标签变量等拼接起来

StringBuilder sbXML = new StringBuilder();

 sbXML.Append(" <Project xmlns='http://schemas.microsoft.com/project'> ");
 sbXML.Append(" <Tasks> ");

 sbXML.Append(" <Task> ");

        sbXML.Append(" <ID> ");
        sbXML.Append("0");
        sbXML.Append(" </ID> ");

        sbXML.Append(" <Name> ");
        sbXML.Append("项目");
        sbXML.Append(" </Name> ");

        sbXML.Append(" <OutlineNumber> ");
        sbXML.Append("0");
        sbXML.Append(" </OutlineNumber> ");

        sbXML.Append(" <Start> ");
        sbXML.Append(kg);//获得该项目的计划开工日期
        sbXML.Append(" </Start> ");

        sbXML.Append(" <Finish> ");
        sbXML.Append(wg);//获得该项目的计划完工日期
        sbXML.Append(" </Finish> ");

        sbXML.Append(" <Summary> ");
        sbXML.Append("1");
        sbXML.Append(" </Summary> ");

        sbXML.Append(" <PercentComplete> ");
        sbXML.Append("0");
        sbXML.Append(" </PercentComplete> ");
        sbXML.Append(" </Task> ");

       sbXML.Append(" </Tasks> ");
        sbXML.Append(" </Project>");
        
        Response.ContentType = "text/xml ";
        Response.Write(sbXML.ToString());
        Response.End();   //将信息发送到客户端   Response对象用于动态响应客户端请示,控制发送给用户的信息

 

上述代码实现了将XML拼接好,并显示到客户端,但是并未实现保存为XML文件

4、为了实现将拼接好的StringBuilder保存为XML文件,使用FileStream(文件流)

FileStream对象表示在磁盘或网络路径上指向文件的流,这个类提供了在文件中读写字节的方法。

所以,将3中最后三行代码替换为

try
        {
        //1.创建文件流
            FileStream fileStream = new FileStream("HiprojectWeb/test.xml", FileMode.Create);
        //2.创建写入器
        StreamWriter streamWriter = new StreamWriter(fileStream);
        //3.将内容写入文件
        streamWriter.WriteLine(sbXML);
        //4.关闭写入器
        streamWriter.Close();
        //5.关闭文件流
        fileStream.Close();
        }
        catch (Exception e)
        { }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值