如何从XML元素创建Point对象

本文关键字:创建 Point 对象 元素 XML | 更新日期: 2023-09-27 18:26:36

我有一个应用程序,它需要保存对象的x,y坐标的功能,以便在以后第二次启动应用程序时,应用程序可以在以前找到的点上搜索图像。

我已经成功地创建了一种使用应用程序发现的要点编写XML文档的方法(我认为它的格式正确)。现在,我只需要在启动时将这些点从XML文件读取回一个点对象。

我已经找到了几个"如何"从文件中读取XML的例子,或者类似问题的答案,但无论出于什么原因,我都很难将这些答案应用于这种情况。我感兴趣的是解释如何从xml中提取date元素并创建datatime对象,以及提取每个location元素中的x元素和y元素,并将它们放入一个新的Point中,然后我可以使用。

这就是我的XML文档的样子:

<?xml version="1.0" encoding="utf-8"?>
<FirstLookGameBox_XML>
  <location>
    <date>2014-10-15T00:00:00-06:00</date>
    <x>0</x>
    <y>0</y>
  </location>
  <location>
    <date>2014-10-15T00:00:00-05:00</date>
    <x>0</x>
    <y>0</y>
  </location>
  <location>
    <date>2014-10-15T00:00:00-04:00</date>
    <x>0</x>
    <y>0</y>
  </location>
</FirstLookGameBox_XML>

以下是我的代码。。。很明显,linq/xml,老实说,我真的不确定我在用它做什么。大多数答案只是向你抛出一块代码,而没有解释它的含义,所以我试图把我发现的东西用于我自己的目的,但它并没有像我希望的那样起作用。

var xml = XDocument.Load("test.xml");
string date;
int? x;
int? y;
var q = from b in xml.Descendants("location")
        select new
        {
            date = (string)b.Element("date"),
            x = (int?)b.Element("x"),
            y = (int?)b.Element("y"),
        };

我还想知道我格式化XML文档的方式是否正确?我的目标是找到图像的最后已知位置,但只存储最后3个已知位置。如果找到第四个位置,我会用最新的最后已知位置替换最旧的最后已知的位置。

希望我已经提供了足够的信息,使之有意义。

如何从XML元素创建Point对象

wait-wait-wait,您希望以下代码段中声明的x和y有任何值吗?

var xml = XDocument.Load("test.xml");
string date;
int? x;
int? y;

实际上,您并没有将这些设置为任何内容,如果您设置了,那就没有任何意义,因为您的XML中有许多xy。如果你想访问你实际存储的x和y,可以这样做。

foreach (var obj in q)
{
    Console.WriteLine(obj.x);  // or however you want to see your input
    Console.WriteLine(obj.y);
}