Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 比较来自2个xml的元素';s_C#_Xml - Fatal编程技术网

C# 比较来自2个xml的元素';s

C# 比较来自2个xml的元素';s,c#,xml,C#,Xml,我目前正在从事一个项目,每天从客户机获取一个xml文件,我需要从中读取数据并将其加载到数据库。我实现这一点的方式是,我从xsd生成一个类,并使用StreamReader读取xml文件,反序列化数据,然后循环遍历成员并将其添加到数据库中 现在,我得到了另一个要求,仅当成员详细信息已从前一天的xml文件更改时,才需要将成员添加到数据库中。我可以用同样的方式编写代码,并添加逻辑来搜索/比较成员详细信息与前一天的xml文件,如果发现任何更改,则添加成员 但是这个过程非常低效,因为我需要用新的xml为每个

我目前正在从事一个项目,每天从客户机获取一个xml文件,我需要从中读取数据并将其加载到数据库。我实现这一点的方式是,我从xsd生成一个类,并使用StreamReader读取xml文件,反序列化数据,然后循环遍历成员并将其添加到数据库中

现在,我得到了另一个要求,仅当成员详细信息已从前一天的xml文件更改时,才需要将成员添加到数据库中。我可以用同样的方式编写代码,并添加逻辑来搜索/比较成员详细信息与前一天的xml文件,如果发现任何更改,则添加成员

但是这个过程非常低效,因为我需要用新的xml为每个成员遍历前一天的xml。有什么有效的方法来实现这一点吗


请提供您的建议。谢谢

我建议不要用以前的xml文件比较值,而是用insert/update命令中的DB比较值

IF(/* Check whether value changed code*/) BEGIN
    INSERT INTO ...
END

这样,您就不必跟踪以前的xml文件等。

这听起来像是一种可以利用数据库的功能/资源并让它进行比较/更新/插入的情况。将每日文件加载到暂存表中,并运行一个查询或存储过程,确定哪些记录需要更新,而不是尝试从c#中进行比较


您在前面的评论中提到,这是不可能的,因为数据分布在不同的表中。如果与该数据的比较过于复杂,那么您可以在暂存表中保留2天的数据——使用日期时间戳来区分哪些记录集是“今天”的,哪些记录集是“昨天”的。运行查询以识别相同与不同,并将结果返回到c#,在c#中,您可以继续处理数据分发/更新的逻辑。

您可以将当前的xml加载到数据库的“暂存”表中,并使用存储过程在数据库级别处理比较和更新。每天清空“staging”表并加载新的xml,然后运行存储过程。签出此我已经检查了该链接,比较输出与原始xsd不匹配。因此,我将无法反序列化结果…不,我无法使用数据库逻辑,由于xml中的数据分布在不同的表中,“分布在不同的表中”的数据不会阻止您使用“数据库逻辑”。嗯,我以前在文件逻辑方面有过不好的经验。。比如延迟获取文件、意外获取同一个文件,或者在数据提供程序端的系统关闭后一次获取10个文件等。每种情况都是另一种情况,我建议使用保存的数据进行比较。如果你真的需要比较文件,我也在那里:)请自己编写代码,因为有时diff api会告诉你一个值,下面的几个值会更改,但你会看到新节点被插入,其他节点没有更改等等@DourHighArch是的,这并不能阻止我,但我担心的是从任何数据源读取多次(xml或db)这将对性能造成影响…而且我们每个周末都会进行数据清理。因此,每周一都不会有数据进行比较。我刚刚发现xml中有一个LastModified和CreatedDateTime字段。我计划从客户端获取有关这些字段的更多详细信息。如果它们打算正常工作,我可以使用这些字段s并与currentDateTime进行比较…其LastModified或CreatedDateTime等于currentDateTime的所有成员都将加载到数据库…这样我就不必与任何旧数据源进行比较