我正在共同开发一种从通信总线读取和显示数据的车辆信息系统。总线上的信令信息存储在某种数据库中(从我猜测的黑暗时代开始),只能通过提取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的唯一目的是将不同的实体链接在一起,“Signal 1”属于“Frame 1”,依此类推......
实体的唯一标识符在实体之间有所不同,但它通常是id,name或某些元素的组合。
由于项目之间存在重叠,第二个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”。
我想要实现的是将“Signal 2”添加到第一个文件并将帧引用更新为1001.
我到目前为止提出的最佳解决方案是进行简单合并(使用linq),搜索整个文件中的重复项,存储所有相关ID,最后但并非最不重要的是用正确的ID替换已删除的ID。
我很确定我的问题没有oneliner解决方案(因为问题源于糟糕的数据库结构),但是不要问这个问题是愚蠢的。
答案 0 :(得分:0)
好吧,我想我的问题也没有任何花哨的解决方案。我最终使用了我在问题中描述的“解决方案”。
嗯,更重要的事情!