【问题标题】:Merging cross referenced XML-files合并交叉引用的 XML 文件
【发布时间】:2009-06-16 23:40:53
【问题描述】:

我正在共同开发一个车辆信息系统,该系统从通信总线读取和呈现数据。总线上的信号信息存储在某种数据库中(我猜是从黑暗时代开始的),只有通过提取 xml 快照才能从中获取数据。由于这还不够糟糕,高层管理人员认为将系统的不同部分视为不同的项目(在组织结构图中看起来非常好)是一个好主意,这会导致更多的数据库......

现在我有责任将这些 xml 文件合并为一个,在我开始将头撞到墙上之前,我认为如果有任何巧妙的解决方案可以解决我的问题,最好与各位天才核实一下。

xml的结构有点像这样:

<data>
  <frame ID="1001">
    <attributes>
      <name>Frame 1</name>
      <description>The first frame</description>
    </attributes>
    <references/>
  </frame>
  <signal ID="1002">
    <attributes>
      <signalid>1</signalid>
      <name>Signal 1</name>
    </attributes>
    <references>
      <frame ID="1001"/>
    </references>
  </signal>
</data> 

所有实体(信号、帧等)都位于根元素的正下方,每个实体可以有多个。 ID 是在从数据库中提取文件时生成的,并且每次都会更改。 id的唯一目的是将不同的实体链接在一起,“信号1”属于“帧1”等等......

实体的唯一标识符因实体而异,但通常是 id、名称或某些元素的组合。

由于项目之间存在重叠,第二个 xml 文件可能如下所示:

<data>
  <frame ID="2001">
    <attributes>
      <name>Frame 1</name>
      <description>The first of many frames</description>
    </attributes>
    <references/>
  </frame>
  <signal ID="2002">
    <attributes>
      <signalid>1</signalid>
      <name>Signal 1</name>
    </attributes>
    <references>
      <frame ID="2001"/>
    </references>
  </signal>
  <signal ID="2003">
    <attributes>
      <signalid>2</signalid>
      <name>Signal 2</name>
    </attributes>
    <references>
      <frame ID="2001"/>
    </references>
  </signal>
</data>

如您所见,“Frame 1”和“Signal 1”现在有多个实例,但第二个文件向“Frame 1”添加了另一个信号。

我想要实现的是将“信号 2”添加到第一个文件并将帧引用更新为 1001。

到目前为止,我想出的最佳解决方案是进行简单的合并(使用 linq),搜索整个文件中的重复项,存储所有相关的 ID,最后但并非最不重要的是用正确的 ID 替换已删除的 ID。

我很确定我的问题没有单一的解决方案(因为问题源于糟糕的数据库结构),但不问是愚蠢的。

【问题讨论】:

    标签: c# xml vb.net linq merge


    【解决方案1】:

    好吧,我想我的问题也没有任何花哨的解决方案。我最终使用了我在问题中描述的“解决方案”。

    好吧,继续做更大的事情!

    【讨论】:

      猜你喜欢
      • 2011-08-15
      • 1970-01-01
      • 2012-07-25
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多