How can I build XML in C#?

前端 未结 9 1920

How can I generate valid XML in C#?

9条回答
  •  夕颜
    夕颜 (楼主)
    2020-11-22 06:55

    I think this resource should suffice for a moderate XML save/load: Read/Write XML using C#.

    My task was to store musical notation. I choose XML, because I guess .NET has matured enough to allow easy solution for the task. I was right :)

    This is my song file prototype:

    
        
        
        
        
        
    
    

    That can be solved quite easily:

    For Save to File:

     private void saveToolStripMenuItem_Click(object sender, EventArgs e)
     {
         saveFileDialog1.Title = "Save Song File";
         saveFileDialog1.Filter = "Song Files|*.xsong";
         if (saveFileDialog1.ShowDialog() == DialogResult.OK)
         {
             FileStream fs = new FileStream(saveFileDialog1.FileName, FileMode.Create);
             XmlTextWriter w = new XmlTextWriter(fs, Encoding.UTF8);
             w.WriteStartDocument();
             w.WriteStartElement("music");
             w.WriteAttributeString("judul", Program.music.getTitle());
             w.WriteAttributeString("pengarang", Program.music.getAuthor());
             w.WriteAttributeString("tempo", Program.music.getTempo()+"");
             w.WriteAttributeString("birama", Program.music.getBirama());
             w.WriteAttributeString("nadadasar", Program.music.getNadaDasar());
             w.WriteAttributeString("biramapembilang", Program.music.getBiramaPembilang()+"");
             w.WriteAttributeString("biramapenyebut", Program.music.getBiramaPenyebut()+"");
    
             for (int i = 0; i < listNotasi.Count; i++)
             {
                 CNot not = listNotasi[i];
                 w.WriteStartElement("not");
                 w.WriteAttributeString("angka", not.getNot() + "");
                 w.WriteAttributeString("oktaf", not.getOktaf() + "");
                 String naikturun="";
                 if(not.isTurunSetengah())naikturun="\\";
                 else if(not.isNaikSetengah())naikturun="/";
                 w.WriteAttributeString("naikturun",naikturun);
                 w.WriteAttributeString("nilai", not.getNilaiNot()+"");
                 w.WriteEndElement();
             }
             w.WriteEndElement();
    
             w.Flush();
             fs.Close();
         }
    
     }
    

    For load file:

    openFileDialog1.Title = "Open Song File";
    openFileDialog1.Filter = "Song Files|*.xsong";
    if (openFileDialog1.ShowDialog() == DialogResult.OK)
    {
        FileStream fs = new FileStream(openFileDialog1.FileName, FileMode.Open);
        XmlTextReader r = new XmlTextReader(fs);
    
        while (r.Read())
        {
            if (r.NodeType == XmlNodeType.Element)
            {
                if (r.Name.ToLower().Equals("music"))
                {
                    Program.music = new CMusic(r.GetAttribute("judul"),
                        r.GetAttribute("pengarang"),
                        r.GetAttribute("birama"),
                        Convert.ToInt32(r.GetAttribute("tempo")),
                        r.GetAttribute("nadadasar"),
                        Convert.ToInt32(r.GetAttribute("biramapembilang")),
                        Convert.ToInt32(r.GetAttribute("biramapenyebut")));
                }
                else
                    if (r.Name.ToLower().Equals("not"))
                    {
                        CNot not = new CNot(Convert.ToInt32(r.GetAttribute("angka")), Convert.ToInt32(r.GetAttribute("oktaf")));
                        if (r.GetAttribute("naikturun").Equals("/"))
                        {
                            not.setNaikSetengah();
                        }
                        else if (r.GetAttribute("naikturun").Equals("\\"))
                        {
                            not.setTurunSetengah();
                        }
                        not.setNilaiNot(Convert.ToSingle(r.GetAttribute("nilai")));
                        listNotasi.Add(not);
                    }
            }
            else
                if (r.NodeType == XmlNodeType.Text)
                {
                    Console.WriteLine("\tVALUE: " + r.Value);
                }
        }
    }
    
    }
    }
    

提交回复
热议问题