读书人

关于C# 读取XML 的有关问题~救急

发布时间: 2012-06-05 13:54:06 作者: rapoo

关于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;                    }                }            } 

读书人网 >C#

热点推荐