如何从XML元素创建Point对象

时间:2014-10-15 21:05:33

标签: c# xml linq-to-xml

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

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

我找到了几个"如何"从文件中读取XML,或回答类似的问题,但无论出于何种原因,我都难以将这些答案应用于这种情况。我感兴趣的是如何从xml中提取日期元素并创建数据时对象,以及在每个位置元素中拉出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个已知位置。如果找到第四个位置,我将用最新的最新已知位置替换最旧的最后一个已知位置。

希望我已经为此提供了足够的信息。

1 个答案:

答案 0 :(得分:1)

等待等待,您是否期望在以下代码段中声明的此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);
}