您好我正在开展一个项目,我需要注册XML Feed的更改。 XML源是从第三方网站生成的,如果Feed的结构发生变化,我很感兴趣。我不介意字段的值是否发生变化但我确实需要注册结构更改,因为网站上运行的脚本。例如:
<?xml version="1.0" encoding="UTF-8"?>
<company>
<branch>
<employee id="001">
<name>Name 1</name>
<designation>Engineer</designation>
</employee>
<employee id="002">
<name>Name 2</name>
<designation>Engineer</designation>
</employee>
</branch>
</company>
VS
<?xml version="1.0" encoding="UTF-8"?>
<company>
<branch>
<employee id="001">
<something>Value</something>
<name>Name 1</name>
<designation>Engineer</designation>
</employee>
<employee id="002">
<something>Value</something>
<name>Name 2</name>
<designation>Engineer</designation>
</employee>
</branch>
</company>
我正在使用的文件比示例大得多(> 15000行),并且Feed中的更改可能与“产品”的“产品”一样少。注册更改的程序将在服务器上运行,并进行每日检查。
我考虑过将XML Feed转换为XSD文件并存储旧版本。这样我每天都可以生成一个新的XML文件,将其转换为XSD并比较旧版本和新版本。但我不确定这是正确的方法。
所以我的问题是:有谁知道如何有效地解决这个问题?
答案 0 :(得分:1)
您描述的场景不是基于XML的通信应该如何工作。
通信建立在共同理解的基础上。 基于XML的通信中的这种理解通常建立在定义XML结构的模式之上。架构成为您可以编写代码的合同。
如果没有架构且共享理解只是交换XML(并且结构可以以XML允许的任何方式改变),那么您对XML的处理必须非常通用。它必须处于元素和属性的层面,因为共享的理解不再允许。然后,您将在通用XML解析器领域中运行。
如果您的共享理解可能包含以前的XML文档,就像是这样,是的,您可以识别差异。然而,问题是如何处理这些差异。只有限制了它们的性质,这些差异才有用。如果您期待MISMO抵押贷款申请文件并且您收到WIPO专利申请,那么差异将是巨大的,您的选择是零。
最后,如果你确实限制了差异的性质,你将如何表达?答案是你要编写一个模式,它将我们带回到你应该一直存在的地方,以便进行成功的基于XML的通信。
根据评论进行更新
如果您只想识别两个XML文档之间的差异,