更新时间:2023-11-24 16:14:04
您可能想要检查Linq- -XML:
XDocument coordinates = XDocument.Load(yourfilename.xml);
$ b foreach(坐标中的坐标.Descendants(坐标))
{
string time = coordinate.Attribute(time)。Value;
字符串初始值= coordinate.Element(initial)。Value;
string final = coordinate.Element(final)。Value;
//对这些信息做任何你想做的事情现在
$ / code $ / pre
这应该比使用直接的低级别XmlTextReader更容易......
请参阅 here 或这里(或许多其他地方)介绍Linq-to-XML。
更新:
请尝试此代码 - ,然后你得到结果列表中的所有坐标,那么Linq-to-XML代码就可以了:
定义一个新的helper类:
public class Coordinate
{
public string Time {get;组; }
public string Initial {get;组; }
public string Final {get;组; }
}
以及您的主要代码:
XDocument xdoc = XDocument.Load(C:\\test.xml);
IEnumerable< XElement> cords = xdoc.Descendants(coordinate);
var coordinate = cords
.Select(x => new Coordinate()
{
Time = x.Attribute(time)。Value,
Initial = x.Attribute(initial)。Value,
Final = x.Attribute(final)。Value
});
这份清单及其内容如何?你会得到你期望的所有坐标吗?
I'm saving 2-dimensional coordinates on an XML file with a structure similar to:
<?xml version="1.0" encoding="utf-8" ?>
<grid>
<coordinate time="78">
<initial>540:672</initial>
<final>540:672</final>
</coordinate>
</grid>
I can open the XML file and read it via the XmlTextReader, but how do I loop through the coordinates specifically to retrieve both the time attribute and data between the initial and final nodes in some format similar to:
string initial = "540:672";
string final = "540:672";
int time = 78;
New Code:
My New Code:
//Read the XML file.
XDocument xmlDoc = XDocument.Load("C:\\test.xml");
foreach (var coordinate in xmlDoc.Descendants("coordinate"))
{
this.coordinates[this.counter][0] = coordinate.Attribute("time").Value;
this.coordinates[this.counter][1] = coordinate.Element("initial").Value;
this.coordinates[this.counter][2] = coordinate.Element("final").Value;
this.counter++;
};
but now I get this error:
"Object reference not set to an instance of an object."
XML
<?xml version="1.0" encoding="utf-8"?>
<grid>
<coordinate time="62">
<initial>540:672</initial>
<final>540:672</final>
</coordinate>
...
<coordinate time="46">
<initial>176:605</initial>
<final>181:617</final>
</coordinate>
</grid>
Skipped a few coordinate tags to fit, but they all had the time attribute and initial/final subtags.
Globals
uint counter = 0;
// Coordinates to be retrieved from the XML file.
string[][] coordinates;
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??