I\'m saving 2-dimensional coordinates on an XML file with a structure similar to:
You could have used XmlSerialization to make the XML into a simple list of coordinate classes with a small amount of work, e.g.
public class coordinate
{
[XmlAttribute]
public int time;
[XmlElement(ElementName="initial")]
public string initial;
[XmlElement(ElementName = "final")]
public string final;
public coordinate()
{
time = 0;
initial = "";
final = "";
}
}
public class grid
{
[XmlElement(ElementName="coordinate", Type = typeof(coordinate))]
public coordinate[] list;
public grid()
{
list = new coordinate[0];
}
}
Then in your code:
XmlReader r = new XmlReader.Create(...);
grid g = (grid) new XmlSerializer(typeof(grid)).Deserialize(r);
You might want to check into something like Linq-to-XML:
XDocument coordinates = XDocument.Load("yourfilename.xml");
foreach(var coordinate in coordinates.Descendants("coordinate"))
{
string time = coordinate.Attribute("time").Value;
string initial = coordinate.Element("initial").Value;
string final = coordinate.Element("final").Value;
// do whatever you want to do with those items of information now
}
That should be a lot easier than using straight low-level XmlTextReader....
See here or here (or a great many other places) for introductions to Linq-to-XML.
UPDATE:
please try this code - if it works, and you get all the coordinates in that resulting list, then the Linq-to-XML code is fine:
Define a new helper class:
public class Coordinate
{
public string Time { get; set; }
public string Initial { get; set; }
public string Final { get; set; }
}
and in your main code:
XDocument xdoc = XDocument.Load("C:\\test.xml");
IEnumerable<XElement> cords= xdoc.Descendants("coordinate");
var coordinates = cords
.Select(x => new Coordinate()
{
Time = x.Attribute("time").Value,
Initial = x.Attribute("initial").Value,
Final = x.Attribute("final").Value
});
How does this list and its contents look like?? Do you get all the coordinates you're expecting??