<?xml version="1.0" encoding="gbk" ?>
- <humans>
- <human>
<NO>1</NO>
<Name>CSDN</Name>
<sr>1988/05/05</sr>
<Sex>男</Sex>
</human>
- <human>
<NO>2</NO>
<Name>王羲之</Name>
<sr>1988/05/05</sr>
<Sex>男</Sex>
</human>
- <human>
<NO>3</NO>
<Name>马云</Name>
<sr>1988/04/05</sr>
<Sex>男</Sex>
</human>
</humans>怎么依次获取No,Name,sr和sex的值,比如加到List中
- <humans>
- <human>
<NO>1</NO>
<Name>CSDN</Name>
<sr>1988/05/05</sr>
<Sex>男</Sex>
</human>
- <human>
<NO>2</NO>
<Name>王羲之</Name>
<sr>1988/05/05</sr>
<Sex>男</Sex>
</human>
- <human>
<NO>3</NO>
<Name>马云</Name>
<sr>1988/04/05</sr>
<Sex>男</Sex>
</human>
</humans>怎么依次获取No,Name,sr和sex的值,比如加到List中
XmlTextReader类源于XmlReader类。XmlTextReader类可用来读取XML文档。此类的Read方法读取此文档,直到其节点结束。 在这篇文章里,将演示如何使用XmlTextReader类来读取一个XML文档及输出数据到控制台。 加入名字空间引用 因为Xml类都定义在System.Xml名字空间当中,所以首先要做的是在工程里加入对System.Xml的引用。 using System.Xml; 打开一个XML文档 XmlTextReader类的构造器打开一个XML文件。在这个例子里使用了一个名为xmltest.xml的文件,它保存在C:\temp目录当中。你可以下载此附件。 // 打开一个 XML 文件
XmlTextReader reader = new XmlTextReader("C:\\temp\\xmltest.xml"); 读取数据 XmlTextReader类的Read方法读取数据。 while ( reader.Read() )
{
Console.WriteLine(reader.Name);
} 源代码:
附件
CS Code
XML文件 namespace ReadXML
{
using System;
using System.Xml; public static int Main(string[] args)
{
try
{
// 打开一个 XML 文件
XmlTextReader reader = new XmlTextReader("C:\\temp\\xmltest.xml");
while ( reader.Read() )
{
Console.WriteLine(reader.Name);
}}
catch (Exception e)
{
Console.WriteLine ("Exception: {0}", e.ToString());
}
return 0;
}
}
}
Dom方法:XmlDocument类(Dom树)
另一种(忘记名了):xmltextreader(顺序读节点)
然后可以用node.Attributes[name]或者ele.GetAttribute()获取
XmlDocument doc = new XmlDocument();
doc.LoadXml("<?xml version=\"1.0\" encoding=\"gbk\" ?> <humans><human><NO>1</NO> <Name>CSDN</Name> <sr>1988/05/05</sr> <Sex>男</Sex> </human> <human> <NO>2</NO> <Name>王羲之</Name> <sr>1988/05/05</sr> <Sex>男</Sex> </human> <human> <NO>3</NO> <Name>马云</Name> <sr>1988/04/05</sr> <Sex>男</Sex> </human> </humans>");
XmlNodeList nl = doc.SelectNodes("/humans/human");
foreach (XmlNode x in nl)
{
//如果XML顺序完全和上面一样可以用childNodex[x]的方式,否则请再用xpath语法选择
yourList.add(new yourEntity(){NO = x.childNodes[0].innerText,name=x.childNodes[1].innerText,.....})
}未经测试
{
List<Human> humans = new List<Human>();
XmlDocument doc = new XmlDocument();
doc.Load("test.xml");
XmlNode nodes = doc.DocumentElement;
foreach (XmlNode node in nodes.ChildNodes)
{
Human human = new Human();
foreach (XmlNode node1 in node)
{
switch (node1.Name)
{
case "NO":
human.NO = Convert.ToInt32(node1.InnerText);
break;
case "Name":
human.Name = node1.InnerText;
break;
case "sr":
human.Sr = node1.InnerText;
break;
case "Sex":
human.Sex = node1.InnerText;
break;
}
}
humans.Add(human);
}
foreach (Human human in humans)
{
Console.Write(human.NO + " ");
Console.Write(human.Name + " ");
Console.Write(human.Sr + " ");
Console.Write(human.Sex + " ");
Console.WriteLine();
}
Console.Read();
}human类
class Human
{
public int NO { get; set; }
public string Name { get; set; }
public string Sr { get; set; }
public string Sex { get; set; }
}
如果我有这样的List包含了上面人员的信息,在修改或者添加了之后,如果再写入到XML中??
望大家不吝赐教
foreach (Human human3 in humans)
{
xml += "<human> \r\n";
xml += "<NO>" + human3.NO + "</NO> \r\n";
xml += "<Name>" + human3.Name + "</Name> \r\n";
xml += "<sr>" + human3.Sr + "</sr> \r\n";
xml += "<Sex>" + human3.Sex + "</Sex> \r\n";
xml += "</human> \r\n";
}
xml += "</humans>"; FileStream fs = new FileStream("test.xml",FileMode.Create, FileAccess.Write);
StreamWriter sw = new StreamWriter(fs);
sw.WriteLine(xml);
sw.Close();
fs.Close();
DataSet的ReadXML呀
或者是DataTable的ReadXML
DataTable dt=new DataTable();
dt.ReadXml("XML绝对路径");
试第一行数据如下
dt.Rows[0]["NO"]
dt.Rows[0]["Name"]
dt.Rows[0]["sr"]
dt.Rows[0]["Sex"]以上参考希望对楼主有帮忙
File.Delete("test.xml");
XmlDocument xDoc = new XmlDocument();
XmlNode nodeIn = xDoc.CreateNode(XmlNodeType.XmlDeclaration, "1.0", "gb2312");
xDoc.AppendChild(nodeIn);
XmlElement xmlRoot = xDoc.CreateElement("", "humans", "");
xDoc.AppendChild(xmlRoot);
foreach(Human human4 in humans)
{
XmlElement xmlChild = xDoc.CreateElement("", "human", "");
xmlRoot.AppendChild(xmlChild);
XmlElement xmlelem1 = xDoc.CreateElement("", "NO", "");
XmlText xmlText1 = xDoc.CreateTextNode(human4.NO.ToString());
xmlelem1.AppendChild(xmlText1);
xmlChild.AppendChild(xmlelem1); XmlElement xmlelem2 = xDoc.CreateElement("", "Name", "");
XmlText xmlText2 = xDoc.CreateTextNode(human4.Name);
xmlelem2.AppendChild(xmlText2);
xmlChild.AppendChild(xmlelem2); XmlElement xmlelem3 = xDoc.CreateElement("", "sr", "");
XmlText xmlText3 = xDoc.CreateTextNode(human4.Sr);
xmlelem3.AppendChild(xmlText3);
xmlChild.AppendChild(xmlelem3); XmlElement xmlelem4 = xDoc.CreateElement("", "Sex", "");
XmlText xmlText4 = xDoc.CreateTextNode(human4.Sex);
xmlelem4.AppendChild(xmlText4);
xmlChild.AppendChild(xmlelem4);
}
xDoc.Save("test.xml");原来是这样创建
xw.Formatting = Formatting.Indented;
xw.WriteStartDocument();
xw.WriteStartElement("humans");
foreach(Human human4 in humans)
{
xw.WriteStartElement("human");
xw.WriteElementString("NO",human4.NO.ToString());
xw.WriteElementString("Name", human4.Name);
xw.WriteElementString("sr", human4.Sr);
xw.WriteElementString("Sex", human4.Sex);
xw.WriteEndElement();
}
xw.WriteEndElement();
xw.WriteEndDocument();
xw.Flush();
xw.Close();这样更简单点
VS自身自带的方法不是每个都差,但在读取文件方面还是很快的,
你可试试,
一个是经XML类读取出来然后一个结点一个结点的去读取还是
DataTable里一行一行的去访问快,两种都试一下也可以提搞自己的水平
特别感谢xhddd111!!