text.xml文本
<?xml version="1.0" encoding="utf-8"?>
<userInfo value="userInfo1" name="userInfo">
<ddd value="ddd" name="gddd">
zhangsan<ddd1 value="ddd1" name="gddd1">ddd1</ddd1><ddd2 value="ddd2" name="gddd2">ddd2</ddd2></ddd>
<guest value="guest1" name="guest">
<name value="test" name="name">qwqw<sdsd value="23" name="sdsd">sdsd</sdsd><hhh Value="20080822035545" name="hhh">dgf</hhh><oooooo Value="20080822065316">oooooo</oooooo><yuyu Value="20080822071322">yuyu</yuyu><tt Value="20080824041842">tt</tt><name1 value="20080824042213" name="name1">name1<iii Value="20080825105420">iii</iii></name1><keke Value="20080825112557">keke</keke><ok1 Value="20080825020120">0k1</ok1></name>
</guest>
<guest value="guest2" name="guest">
<name value="test1" name="name">ttt<sdsd value="23" name="sdsd">sdsd</sdsd><rerere>rrr</rerere><yi Value="20080822023614" name="yi">yyyy</yi><hhh Value="20080822035545" name="hhh">dgfdfg</hhh><name1 value="20080824042217" name="name1">name1<llllllllll Value="20080826093317">111</llllllllll></name1></name>
</guest>
</userInfo>
后台代码:
//点击节点触发事件(获取节点的属性)
TreeNode tn1_1 = new TreeNode();
protected void TreeView1_SelectedNodeChanged2(object sender, EventArgs e)
{
string str = tn1_1.Selected.ToString();
TreeNode selectedNode = TreeView1.SelectedNode; //获取选中的节点
TreeNode child = new TreeNode("child"); //Create TreeNode
selectedNode.ChildNodes.Add(child);
int count = TreeView1.SelectedNode.ChildNodes.Count;
tn1_1 = TreeView1.SelectedNode;
//ViewState["datapath"] = tn1_1.DataPath;
ViewState["GetDelText"] = tn1_1.Text;
ViewState["GetNavigateUrl"] = tn1_1.Target.ToString();
ViewState["NodePath"] = tn1_1.ValuePath;
ViewState["GetValue"] = tn1_1.ToolTip;
ViewState["getvalue1"] = tn1_1.Value;
this.TxtText.Text = (string)ViewState["GetDelText"];
this.TxtPath.Text = (string)ViewState["NodePath"];
this.TxtNavigateUrl.Text = (string)ViewState["GetNavigateUrl"];
this.TextBox1.Text = Convert.ToString(ViewState["GetDelText"]);
this.TextBox4.Text = "test.xml";
}
//在相应点击节点插入节点、元素、属性、文本内容
//注:是插入自定义的元素、属性、文本
//(动态的把数据写入XML文件)正在做。。。
private void xmlwiter(string xmlpath)
{
XmlDocument xmldoc = new XmlDocument();
xmldoc.Load(Server.MapPath("~//App_data//"+ xmlpath));
//遍历treeview选中节点的位置
TreeNodeCollection tc = TreeView1.Nodes;
GetNode1(tc);
XPathNavigator navigator = xmldoc.CreateNavigator();
string nodepath = ViewState["NodePath"].ToString();
foreach (XPathNavigator nav in navigator.Select((string)ViewState["NodePath"]))
{
nav.MoveToFirstAttribute();
//if (nav.Name == Convert.ToString(ViewState["GetDelText"]))
if (nav.Name =="value")
{
if (nav.Value == Convert.ToString(ViewState["GetValue"]))
//if (nav.Value == "12")
{
nav.MoveToParent();//重新回到结点
string xmlpath1 = Convert.ToString(ViewState["NodePath"]);
string sp = ViewState["GetValue"].ToString();
//string sp = "20080824042217";
string fc = "[@value='" + sp + "']";
xmlpath1 += fc;
//XmlNode rootElement = xmldoc.SelectSingleNode(xmlpath1);//查找<userInfo>
//XmlNode rootElement7 = xmldoc.SelectSingleNode(Convert.ToString(ViewState["datapath"]));
XmlNode rootElement = xmldoc.SelectSingleNode(xmlpath1);
string nodes = TextBox1.Text.ToString().Trim();
if (nodes != null)
{
XmlElement websiteElement = xmldoc.CreateElement(nodes);//创建一个<nodes>节点
int Childcount = xmldoc.DocumentElement.ChildNodes.Count;
Childcount++;
websiteElement.SetAttribute("guestID", Childcount.ToString());//设置该节点guestID属性
string Elements = TextBox2.Text.ToString().Trim();
XmlElement nameElement = xmldoc.CreateElement(Elements);//设置元素(名称)
nameElement.InnerText = TextBox3.Text;//设置文本节点
nameElement.SetAttribute("Value",DateTime.Now.ToString("yyyyMMddhhmmss"));
websiteElement.AppendChild(nameElement);//添加到<nodes>节点中
rootElement.AppendChild(nameElement);//添加到<Websites>节点中
nav.AppendChild();
//保存创建好的XML文档
xmldoc.Save(Server.MapPath("~//App_data//" + xmlpath));
Response.Redirect(Request.RawUrl);
}
else
{
Response.Write("<cscript>alert('添加子节点不能为空!')</script>");
}
}
}
while (nav.MoveToNext()) ;
}
//}
存在问题是:每次点击(下面某一个节点)与上一个节点(或元素)名 相同的话
就后去不到 下一个节点的属性和文本值????????????????
谁做过类似的东西 给我看看 错在那里。