首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带矩形的C# ReadXML

带矩形的C# ReadXML
EN

Stack Overflow用户
提问于 2019-03-22 04:06:55
回答 1查看 149关注 0票数 0

我有一个数据集"AllEventData",其中(目前)只有一个名为buttonData的表。它有3列--一个自动递增的数字主键、一个名称(typeof(string))和一个矩形。第三列特别是typeof(矩形)。我用一个datatablepanel来显示所有的数据。

我使用了AllEventData.WriteXML方法来写入文件,没有特殊的参数,而且看起来工作得很好--我得到了一个如下所示的文件:

代码语言:javascript
复制
<?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时,它只用按钮名称填充datatablepanel,而不是矩形位置。

我尝试单独编写模式:

代码语言:javascript
复制
        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);
            }
        }

同样的基本内容也是相反的,用模式来读取它:

代码语言:javascript
复制
        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写的东西?

EN

回答 1

Stack Overflow用户

发布于 2019-03-22 22:52:22

正如Olivier在评论中指出的那样,矩形对于XML来说太复杂了,即使它可以分解它们,看起来它会很好地工作。因此,正确阅读它的“诀窍”是:

  1. 编写一个代码块来解析XML,如"how to parse xml“链接中所述,
  2. 序列化和反序列化矩形,如"how to serialize/serialize”链接中所述,
  3. 首先以完全不同的方式将数据存储在表中。

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

这样,我就可以简单地使用AllEventData.WriteXML和AllEventData.ReadXML,而不需要编写更多的代码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55288501

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档