/********* 程序设计目的:往已经存在的XML文件中添加新的节点,并把节点读出来显示在列表框中,同时练习怎么删除节点。 ********/
/********* 一共用了一个窗体,四个按纽,一个列表框 ********/
/********* 主要运用的System.Xml命名空间的类的属性和方法 ********/
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Xml;
namespace 操作XML文件
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btnLoopXml_Click(object sender, EventArgs e)
{
//Clear ListBox
listBox1XmlNodes.Items.Clear();
//Load the XML document
XmlDocument document = new XmlDocument();
document.Load(@"C:\Documents and Settings\Administrator\My Documents\Visual Studio 2005\Projects\XMLFile1.xml");
//Loop XML document
recurseXmlDocument((XmlNode)document.DocumentElement, 0);
//读出节点并显示出来
private void recurseXmlDocument(XmlNode root, int indent)
{
//Make sure we don't do anything if the root is null
if (root == null)
{
return;
}
if (root is XmlElement) //Root is an XmlElement type
{
//first print the name
listBox1XmlNodes.Items.Add(root.Name.PadLeft(root.Name.Length + indent));
//Then check if there are any child nodes and if there are,call this
//method anain to print them
if (root.HasChildNodes)
{
recurseXmlDocument(root.FirstChild, indent + 2);
}
//Finally check tosee if there are any siblings and if there are
//call this method again to have them printed
if (root.NextSibling != null)
recurseXmlDocument(root.NextSibling, indent);
}
else if(root is XmlText)
{
//Print the text
string text = ((XmlText)root).Value;
listBox1XmlNodes.Items.Add(text.PadLeft(text.Length+indent));
}
else if(root is XmlComment)
{
//print text
string text = root.Value;
listBox1XmlNodes.Items.Add(text.PadLeft(text.Length+indent));
//Then check if there are any child nodes,and jf there are
//method again to print them
if(root.HasChildNodes)
{
recurseXmlDocument(root.FirstChild,indent+2);
}
//Finally,check to see if there are any siblings,and if there are
//call this method again to have them printed.
if (root.NextSibling!=null)
{
recurseXmlDocument(root.NextSibling,indent);
}
}
}
private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show("关闭窗口!");
this.Close();
}
//添加节点
private void btnCreateNode_Click(object sender, EventArgs e)
{
//Load the XML document
XmlDocument document = new XmlDocument();
document.Load(@"C:\Documents and Settings\Administrator\My Documents\Visual Studio 2005\Projects\XMLFile1.xml");
//Get the root element
XmlElement root = document.DocumentElement;
//create the new nodes
XmlElement newStory = document.CreateElement("story");
XmlElement newTitle = document.CreateElement("title");
XmlElement newAuthor = document.CreateElement("author");
XmlElement newName = document.CreateElement("name");
XmlElement newNationality = document.CreateElement("nationality");
XmlElement newRating = document.CreateElement("rating");
XmlComment comment = document.CreateComment("This story is the story you are reading!");
XmlText title = document.CreateTextNode("美丽人生");
XmlText name = document.CreateTextNode("王亚楠");
XmlText nationality = document.CreateTextNode("中国");
XmlText rating = document.CreateTextNode("智慧,美丽,时尚,活力");
//Insert the element
newStory.AppendChild(comment);
newStory.AppendChild(newTitle);
newStory.AppendChild(newAuthor);
newStory.AppendChild(newRating);
newTitle.AppendChild(title);
newAuthor.AppendChild(newName);
newAuthor.AppendChild(newNationality);
newName.AppendChild(name);
newNationality.AppendChild(nationality);
newRating.AppendChild(rating);
root.InsertAfter(newStory,root.LastChild);
root.InsertAfter(newStory,root.FirstChild);
document.Save(@"C:\Documents and Settings\Administrator\My Documents\Visual Studio 2005\Projects\XMLFile1.xml");
//删除节点
private void btnDeleteNode_Click_1(object sender, EventArgs e)
{
//Load XML document
XmlDocument document = new XmlDocument();
document.Load(@"C:\Documents and Settings\Administrator\My Documents\Visual Studio 2005\Projects\XMLFile1.xml");
//Get the root element
XmlElement root = document.DocumentElement;
// Find the node.root is the <story>tag,soits last child
//while will be the last <book> node.
if (root.HasChildNodes)
{
XmlNode story = root.LastChild;
//Delete the child
root.RemoveChild(story);
//Save the document story to disk
document.Save(@"C:\Documents and Settings\Administrator\My Documents\Visual Studio 2005\Projects\XMLFile1.xml");
}
}
//本程序是先利用btnCreateNode按纽往XML文件中写入数据,然后再利用btnLoopXml按纽读出数据显示在列表框listBox1XmlNodes中
//读数据时主要利用了recurseXmlDocument(XmlNode root, int indent)方法迭代XML中的元素
//问题的关键在于recurseXmlDocument(XmlNode root, int indent)方法的编写
本文转自terryli51CTO博客,原文链接: http://blog.51cto.com/terryli/519420,如需转载请自行联系原作者