使用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(); } } }
}