在项目中需要用C#程序读取XML文件内的内容,这里给大家做一个简单的例子用来演示C#的读取过程。
1、给出的XML文件内容如下所示:
<protocol>
<packet TypeId="0" name="成绩">
<protocolData>
<Chinese>语文</Chinese>
<English>Chinese</English>
<Bit>90</Bit>
</protocolData>
<protocolData>
<Chinese>数学</Chinese>
<English>Math</English>
<Bit>95</Bit>
</protocolData>
<protocolData>
<Chinese>英语</Chinese>
<English>English</English>
<Bit>93</Bit>
</protocolData>
</packet>
</protocol>
2、下面的代码包含选择要打开的文件和读取的过程,放在同一个方法下面了。
public List<string> listNode;
public void importProtocol()
{
try
{
//声明一个List<string>对象,用来保存需要存储的结点内容
listNode = new List<string>();
//listNode.Clear();
//打开选择文件的窗口,选择文件,并将文件路径保存在path中
OpenFileDialog openFileDialog = new OpenFileDialog();
string path = "";
openFileDialog.Title = "请选择导入文件";
openFileDialog.Filter = "xml文件|*.xml";
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
path = openFileDialog.FileName;//通过选择窗口找到文件的路径
}
//声明一个XmlDocument类对象,并将文件加载的对象中
XmlDocument doc = new XmlDocument();
doc.Load(path);
//选择XML的根结点
XmlNode protocol = doc.SelectSingleNode("protocol");
XmlNodeList packet = protocol.ChildNodes;//根结点下的子孙结点列表
int i = 0;
foreach (XmlNode p in packet)
{
XmlElement xe = (XmlElement)p;//将根结点的孩子结点转换为一个XmlElement元素
XmlNodeList xnL = xe.ChildNodes;//获取XmlElement元素的孩子结点
int j = 0;
foreach (XmlNode x in xnL)//遍历得到语文,数学,英语的列表(其他注释的内容是我需要的,大家可以根据自己的情况进行存储)
{
string chi = x.FirstChild.InnerText.Replace("\"", "");
listNode.Add(chi);
//Console.WriteLine(x.FirstChild.InnerText + "*");
//dicChi.Add(i, chi);
//Console.WriteLine(x.LastChild.InnerText + "*");
//string bi = x.LastChild.InnerText.Replace("\"", "");
//dicBit.Add(i, bi);
//Console.WriteLine(xe1.InnerText);---输出所有孩子结点信息
i++;
j++;
}
}
}
catch (Exception ex)
{
MessageBox.Show("出错了" + ex.StackTrace);
}
}
根据自己XML文件的结构和特点获取对应的结点内容即可。在我的程序中保存在List<string>中和字典序列中,这个大家可以根据需要自行选择存储方式。我选择List<string>是为了将从XML文件中获取的内容保存到Excel中。下一篇将给出以List<string>为参数对象的方法,将其保存到Excel中。