0

我有一个数据集“AllEventData”,并且在该数据集中(目前)只有一个名为 buttonData 的表。它有 3 列 - 一个自动递增的数字主键、一个名称 (typeof(string)) 和一个矩形。第三列具体是 typeof(Rectangle)。我用数据表面板显示它。

我使用 AllEventData.WriteXML 方法来编写没有特殊参数的文件,这似乎工作正常 - 我得到一个看起来像这样的文件:

<?xml version="1.0" standalone="yes"?>
<AllEventData>
  <ButtonData>
    <ID>1</ID>
    <Button_x0020_Name>sdfh</Button_x0020_Name>
    <Button_x005F_x0020_Location xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <Location>
        <X>480</X>
        <Y>186</Y>
      </Location>
      <Size>
        <Width>95</Width>
        <Height>67</Height>
      </Size>
      <X>480</X>
      <Y>186</Y>
      <Width>95</Width>
      <Height>67</Height>
    </Button_x005F_x0020_Location>
  </ButtonData>
</AllEventData>

但是当我对同一个文件执行 AllEventData.ReadXML 时,它只会用按钮名称填充数据表面板,而不是矩形位置。

我尝试单独编写架构:

        using (SaveFileDialog saveFileDialog1 = new SaveFileDialog())
        {
            saveFileDialog1.Filter = "XML | *.xml";
            saveFileDialog1.Title = "Save File";
            if (saveFileDialog1.ShowDialog() == DialogResult.OK)
            {
                AllEventData.WriteXml(saveFileDialog1.FileName);
                string xsdFileName = saveFileDialog1.FileName.Substring(0, saveFileDialog1.FileName.Length - 3) + "xsd";
                AllEventData.WriteXmlSchema(xsdFileName);
            }
        }

以及相反的相同基本内容以使用模式读取它:

        using (OpenFileDialog openFileDialog1 = new OpenFileDialog())
        {
            openFileDialog1.Filter = "XML | *.xml";
            openFileDialog1.Title = "Open File";
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                AllEventData.Clear();
                string xsdFileName = openFileDialog1.FileName.Substring(0, openFileDialog1.FileName.Length - 3) + "xsd";
                AllEventData.ReadXmlSchema(xsdFileName);
                AllEventData.ReadXml(openFileDialog1.FileName);

            }
        }

但仍然没有到达那里。

为什么 ReadXML 不能读取 WriteXML 所写的内容?

4

1 回答 1

0

正如 Olivier 在评论中指出的那样,对于 XML 来说矩形太复杂了,尽管它可以将它们分解并且看起来可以正常工作。即使使用模式,它也无法读取它,就像它写入它的方式一样。因此,正确阅读它的“技巧”是:

  1. 编写代码块来解析 XML,如“如何解析 xml”链接中所述
  2. 如“如何序列化/反序列化”链接中所述,序列化和反序列化矩形
  3. 首先将数据完全不同地存储在表中。

后者是我最终选择做的事情。我很容易从矩形中提取 X、Y、宽度和高度,并将它们存储在表格的各个列中(这也让我可以存储我试图弄清楚如何添加的另一条数据),然后在我需要它们时将它们转回矩形,这也使用户更容易编辑矩形。

这样做,我可以简单地使用 AllEventData.WriteXML 和 AllEventData.ReadXML 而无需进一步的代码。

于 2019-03-22T14:52:21.707 回答