今天,实现了一个遍历xml节点的函数,如下:
protected void DisplayTree(XmlNode node) //遍历整个xml的函数
{
if(node!=null) //如果node不为空
{
Format(node); //对这个节点进行操作
}
if(node.HasChildNodes) //如果该node还有孩子节点
{
node=node.FirstChild;
while(node!=null)
{
DisplayTree(node);
node=node.NextSibling;
}
}
}
如果要对这个node进行某种操作,只要在Format函数中实现即可:
void Format(System.Xml.XmlNode node)
{
Console.WriteLine(node.Name);
//显示各个节点的名称,如果是节点中的值,则显示#TEXT.
if(node.Name==“Company“) //如果这个节点的名称是Company
{
XmlNode nextnode = node.FirstNode;
//注意,是FirstNode,还不是NextSibingNextSibing则会跑到下一个节点去了
Console.WriteLine(nextnode.value);
//显示节点为Company中的值
}
}
下面一步:怎么得到函数需要的node对象:
在主函数中,可以这样使用DisplayTree函数:
XmlTextReader xmlread = new XmlTextReader(“e://bb.xml“);
XmlDocument xmldoc = new XmlDocument();
xmldoc.Load(xmlread);
//Load参数可以代入文件名,流等对象如:xmldoc.Load(“E:/bb.xml“)
DisPlayTree(xmldoc.DocumentElement);
.对XML进行更新操作:
与Format函数很相似,如果想更新COMPANY中的值,则需要如此:
void Update(XmlNode node)
{
if(node.Name==“COMPANY“)
{
XmlNode nextnode = node.FirstChild;
nextnode.Value=“needvalue“;
}
}
最后,只要用xmldoc.save(“e://bb.xml“)即可进行更新了,参数可以是XmlWriter对象或是文件名
下面是写的详细代码:
protected void Format(XmlNode node)
{
if(node.Name=="COMPANY") //如果是调委会工作单位及职务的话
{
//XmlNode nextnode = node.FirstChild;
ListBox1.Items.Add(node.InnerText); //显示COMPANY节点的值
}
//ListBox1.Items.Add(node.Name+" "+node.Value);
}
protected void Update(XmlNode node)
{ //更新节点的值
if(node.Name=="COMPANY")
{
XmlNode nextnode = node.FirstChild;
nextnode.Value="雷迅公司";
}
}
protected void DisplayTree(XmlNode node) //遍历整个xml的函数
{
if(node!=null) //如果node不为空
{
Format(node); //则格式化这个node以输出
//Update(node);
}
if(node.HasChildNodes) //如果该node还有孩子节点
{
node=node.FirstChild;
while(node!=null)
{
DisplayTree(node);
node=node.NextSibling;
}
}
}
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
if(!IsPostBack)
{
System.Xml.XmlTextReader xmlread = new XmlTextReader("e://bb.xml");
XmlDocument xmldoc = new XmlDocument();
xmldoc.Load("e://bb.xml");
System.Xml.XmlNode node = xmldoc.DocumentElement;
DisplayTree(node);
xmlread.Close();
XmlNodeList xmllist = xmldoc.SelectNodes("FILE/YEARPLAN");
foreach(XmlNode yearplan in xmllist)
{
ListBox1.Items.Add(yearplan.InnerText);
//yearplan.LastChild.Value="EEEEEE";
}
//xmldoc.Save("e://bb.xml");
}
}