关于C# 读取XML 的问题~救急!!
本菜鸟刚刚学C#,求大虾们解救啊,谢谢!!~~
现在想读取XML上的内容,并在文本框,textbox1,textbox2,textbox3 上分别显示标签<UserCode> <UserName> <Userpwd>
的内容 ,但运行的时候,文本框上只能显示最后一个<User>标签的内容,以下是代码:
class XML
{
public string re;
public string UserCode;
public string UserName;
public string UserPassword;
public void WriteXML(string usercode, string username, string userpassword)
{
string FileName = @"C:\Users\leo\Desktop\test\test\save.xml";
//初始化XML文档操作类
XmlDocument myDoc = new XmlDocument();
//加载XML文件
myDoc.Load(FileName);
//添加元素--UserCode
XmlElement ele = myDoc.CreateElement("UserCode");
XmlText text = myDoc.CreateTextNode(usercode);
//添加元素--UserName
XmlElement ele1 = myDoc.CreateElement("UserName");
XmlText text1 = myDoc.CreateTextNode(username);
//添加元素--UserPwd
XmlElement ele2 = myDoc.CreateElement("UserPwd");
XmlText text2 = myDoc.CreateTextNode(userpassword);
//添加节点 User要对应我们xml文件中的节点名字
XmlNode newElem = myDoc.CreateNode("element", "User", "");
//在节点中添加元素
newElem.AppendChild(ele);
newElem.LastChild.AppendChild(text);
newElem.AppendChild(ele1);
newElem.LastChild.AppendChild(text1);
newElem.AppendChild(ele2);
newElem.LastChild.AppendChild(text2);
//将节点添加到文档中
XmlElement root = myDoc.DocumentElement;
root.AppendChild(newElem);
//保存
myDoc.Save(FileName);
}
public void ReadXML()
{
try
{
using (XmlReader reader = XmlReader.Create(@"C:\Users\leo\Desktop\test\test\save.xml"))
{
reader.Read();
reader.ReadStartElement("UserLogin");
reader.ReadStartElement("User");
reader.ReadStartElement("UserCode");
UserCode = reader.ReadString();
reader.ReadEndElement();
reader.ReadStartElement("UserName");
UserName = reader.ReadString();
reader.ReadEndElement();
reader.ReadStartElement("UserPwd");
UserPassword = reader.ReadString();
reader.ReadEndElement();
reader.ReadEndElement();
while (reader.Read())
{
if (reader.NodeType == XmlNodeType.Element)
{
re = reader.Name;
if (re == "UserLogin")
{
}
else if (re == "UserCode")
{
if (reader.Read())
{
UserCode = reader.Value;
}
}
else if (re == "UserName")
{
if (reader.Read())
{
UserName = reader.Value;
}
}
else if (re == "UserPwd")
{
if (reader.Read())
{
UserPassword = reader.Value;
}
}
else if (reader.NodeType == XmlNodeType.EndElement)
{
re = reader.Name;
}
}
}
}
}
catch
{
MessageBox.Show("fail!");
}
}
}
}
[解决办法]
你确定有将内容写到xml中?你先执行看是否写入,如果写入那么就调试读出的,一步一步调试看哪里出问题就行了!建议你都写到一个字符串,用分隔符,读出来的时候split就ok了。
[解决办法]
XmlReader.Read 方法
在衍生中覆,料流取下一。
这个读取方法是向前进的,MSDN上面有详解;
下面是读取的例子;
[code=C#][/code]
reader.MoveToContent();
// Parse the file and display each of the nodes.
while (reader.Read()) {
switch (reader.NodeType) {
case XmlNodeType.Element:
Console.Write("<{0}>", reader.Name);
break;
case XmlNodeType.Text:
Console.Write(reader.Value);
break;
case XmlNodeType.CDATA:
Console.Write("<![CDATA[{0}]]>", reader.Value);
break;
case XmlNodeType.ProcessingInstruction:
Console.Write("<?{0} {1}?>", reader.Name, reader.Value);
break;
case XmlNodeType.Comment:
Console.Write("<!--{0}-->", reader.Value);
break;
case XmlNodeType.XmlDeclaration:
Console.Write("<?xml version='1.0'?>");
break;
case XmlNodeType.Document:
break;
case XmlNodeType.DocumentType:
Console.Write("<!DOCTYPE {0} [{1}]", reader.Name, reader.Value);
break;
case XmlNodeType.EntityReference:
Console.Write(reader.Name);
break;
case XmlNodeType.EndElement:
Console.Write("</{0}>", reader.Name);
break;
}
}
------解决方案--------------------
也就是说使用它就要用break,我一般用
- C# code
XmlNodeList list = doc.[u]SelectSingleNode[/u]("/Equipment/Image").ChildNodes; foreach (XmlNode node in list) { string id = node["id"].InnerText; string ratio = node["ratio"].InnerText; string location = node["location"].InnerText; string size = node["size"].InnerText; string name = node["name"].InnerText; [u][/u]}
[解决办法]
- C# code
XDocument xdoc = XDocument.Load(@"C:\Users\leo\Desktop\test\test\save.xml""); var query = from ele in xdoc.Descendants("User") select ele; if (query.Count() > 0) { foreach (XElement ele in query.ElementAt(0).Elements()) { if (ele.Name == "UserCode") { textBox1.Text = ele.Value; } else if (ele.Name == "UserName") { textBox2.Text = ele.Value; } else if (ele.Name == "UserPwd") { textBox3.Text = ele.Value; } } }