我正在共同开发一种车辆信息系统,用于读取和显示来自通信总线的数据。公共汽车上的信号信息存储在某种数据库中(从我猜测的黑暗时代开始),只有通过提取xml快照才能获取数据。由于这还不够糟糕,高层管理人员认为将系统的不同部分视为不同项目(组织结构图中看起来非常好)是一个好主意,这导致更多数据库...合并交叉引用的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”属于“第一帧”,依此类推......
实体的唯一标识符在实体之间不同,但它通常是一个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>
正如你可以看到,现在有一种“第1帧”的多个实例和“信号1”,但第二个文件将另一个信号添加到“帧1”。
我想要做到的,是加“信号2”的第一个文件,并更新帧参考1001
最好的解决方案,我想出来的,到目前为止是做一个普通的合并(使用linq),搜索整个文件中的重复项,存储所有相关的ID,最后但并非最不重要的用正确的ID替换已删除的ID。
我很确定我的问题没有oneliner解决方案(因为问题来自糟糕的数据库结构),但它不会问。