C# XML 用法

来源:互联网 发布:c语言第四章答案 编辑:程序博客网 时间:2024/04/25 18:17

1、创建XML同时写入文件



2、创建XML同时写入内存

// 在内存中创建xml到字符串
            MemoryStream fileStream = new MemoryStream();
            XmlTextWriter textWriter = new XmlTextWriter(fileStream, Encoding.Default);
            textWriter.Formatting = Formatting.Indented;

            textWriter.WriteStartDocument();

            textWriter.WriteStartElement("file");
            textWriter.WriteAttributeString("name", "大唐双龙传");
            textWriter.WriteAttributeString("path", "19");
            textWriter.WriteAttributeString("hashid", "19");
            textWriter.WriteAttributeString("size", "19");
            textWriter.WriteAttributeString("share", "19");
            textWriter.WriteEndElement();

            textWriter.WriteEndDocument();

            textWriter.Close();

            byte[] data = fileStream.ToArray();
            string xmlmsg = Encoding.Default.GetString(data);

            MessageBox.Show(xmlmsg);

另一种方法:

 XmlDocument xmldoc = new XmlDocument();
        XmlNode xRoot = xmldoc.CreateNode(XmlNodeType.Element, "root", "");
        xmldoc.AppendChild(xRoot);

        MemoryStream ms = new MemoryStream();
        XmlTextWriter tw = new XmlTextWriter(ms, Encoding.Unicode);
        tw.Formatting = Formatting.Indented;
        tw.Indentation = 4;
        xmldoc.Save(tw);

        byte[] ary = ms.ToArray();
        string s = Encoding.UTF8.GetString(ary);
//        Response.Write(s);  //输出看是正常的
        xmldoc.LoadXml(s);

前面多了一个特殊字符,所以最后一行会出错

确实是增加了一个编码字符,加上这一行就行了:
s = s.Substring(1, s.Length - 1);


3、从文件中读取XML



4、从内存中读取XML

 // 从内存中读取xml字符串
            XmlDocument xmldoc = new XmlDocument();
            //xmldoc.Load(fileStream);
            xmldoc.LoadXml(xmlmsg);
            XmlNode node = xmldoc.SelectSingleNode("/file");

            try
            {
                string fname = node.Attributes.GetNamedItem("name").Value;
                MessageBox.Show(fname);
            }
            catch (Exception ee)
            {
                Console.WriteLine(ee.ToString());
            }




问题及解决办法: