使用XmlTextReader

我是一名初学程序员,从C#和Web服务开始。

在我的Web服务的Service.cs文件中,我创建了一个ReadXMLFile()方法,我试图读取现有的XML文件,从中获取数据并将其放入我在IService.cs创建的相应属性(DataMembers)中。 IService.cs文件。

我的问题是我的代码基本上没有做任何事情。 我已经尝试过寻找网站和教程,但实际上并没有多少,特别是像我这样的初学者。 任何人都知道我应该怎么做,因为我到目前为止所做的事情显然是错误的。

下面是我的ReadXMLFile()方法。

 void ReadXMLFile() { XmlTextReader reader = new XmlTextReader("ClassRoll.xml"); reader.Read(); while (reader.Read()) { if (reader.Name == "id") { id = reader.ReadString(); } else if (reader.Name == "firstname") { link = reader.ReadString(); } else if (reader.Name == "lastname") { description = reader.ReadString(); } else if (reader.Name == "count") { description = reader.ReadString(); } else if (reader.Name == "testscore") { description = reader.ReadString(); } } } 

这是我的xml文件的一个例子

   101010 Smith Joe  65 77 67 64 80    

您可能在while循环中缺少IsStartElement()条件:

 while (reader.Read()) { if (reader.IsStartElement()) { if (reader.Name == "id") { id = reader.ReadString(); } ... } 

此外,使用XPath或LINQ to XML来读取XML会更容易,当然这取决于文件。 以下是一些示例: XPath和LINQ 。

编辑 :看到XML文件详细信息后

您应该更新您的逻辑以跟踪当前student及其testscores 。 另请注意, count是一个属性。 它很快就会变得混乱,我建议你看一下上面提到的样品。

我认为,使用XmlDocument可以获得最佳结果

 public void ReadXML() { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(".xml"); xmlEntities = new List(); foreach(XmlNode item in xmlDoc.ChildNodes) { GetChildren(item); } } private void GetChildren(XmlNode node) { if (node.LocalName == "Строка") { // } else { foreach (XmlNode item in node.ChildNodes) { GetChildren(item); } } } 

它不起作用的原因,例如:当reader.Name ==“firstname”为true但其元素值不正确时。 它的确切含义是读者对象读取下一个Nodetype,即XmlNodeType.Element。 所以在这种情况下查看你的XML文件,使用reader.Read(); 函数再次读取下一个节点,即XmlNodeType.Text,其值为Joe。 我给你的工作版本的例子。

 void ReadXMLFile() { XmlTextReader reader = new XmlTextReader("ClassRoll.xml"); reader.Read(); while (reader.Read()) { if (reader.Name == "id") { reader.Read(); if(reader.NodeType == XmlNodeType.Text) { id = reader.Value; reader.Read(); } } } 

}