Using XmlTextReader
Solution 1
You're probably missing IsStartElement() condition in your while loop:
while (reader.Read())
{
if (reader.IsStartElement())
{
if (reader.Name == "id")
{
id = reader.ReadString();
}
...
}
Also, it would be easier to use XPath or LINQ to XML to read your XML, of course it depends on the file. Here are some examples: XPath and LINQ.
EDIT: after seeing XML file details
You should update your logic to keep track of current student
and its testscores
. Also, note that count
is an attribute. It can get messy pretty soon, I suggest you take a look at the samples mentioned above.
Solution 2
I think, that you get best result using XmlDocument
public void ReadXML()
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load("<name file>.xml");
xmlEntities = new List<XmlEntity>();
foreach(XmlNode item in xmlDoc.ChildNodes)
{
GetChildren(item);
}
}
private void GetChildren(XmlNode node)
{
if (node.LocalName == "Строка")
{
//<you get the element here and work with it>
}
else
{
foreach (XmlNode item in node.ChildNodes)
{
GetChildren(item);
}
}
}
Jess
Updated on July 10, 2022Comments
-
Jess almost 2 years
I am a beginner programmer starting off with C#, and web services.
In the
Service.cs
file of my web service, I create aReadXMLFile()
method where I am trying to read an existing XML file, take the data from it and place it to the corresponding properties (DataMembers) that I created in theIService.cs
file.My problem is that my code is basically not doing anything. I've tried looking for web sites and tutorials on this but there really isn't much out there, especially for a beginner like myself. Anyone have any idea how I should go about this, because what I've been trying so far is obviously wrong.
Below is my
ReadXMLFile()
method.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(); } } }
this is an example of my xml file
<classroll> <student> <id>101010</id> <lastname>Smith</lastname> <firstname>Joe</firstname> <testscores count="5"> <score>65</score> <score>77</score> <score>67</score> <score>64</score> <score>80</score> </testscores> </student> </classroll>
-
Mason about 12 yearsI agree that you should use LINQ to XML (XElement class) unless you have a good reason not to - the only good reason I'm aware of is that your document is too large to slurp it all into memory at once.