判断两个XML文件结构与内容是否相同

1. 引入

  目前公司的这款软件导入导出数据库信息的方法是:组织数据的内容和结构  利用MS com的sax解析 储存数据为XML格式

    优点是可以选择部分导出

    缺点是速度慢文件导出的文件庞大,若客户出现导入导出错误要重现或者调试困难

  由于软件持续更新所以不同版本的,XML有差异

  现客户需求将高版本的软件导出成  低版本XML,保证从任何高版本导出的文件    与  低版本 原先的格式与内容一致

  我们实现了功能之后为了测试功能,要写单元测试

2. 分析

  要测试高版本导出的文件的 内容和格式能完全导出成低版本

   首先要通过低版本 生成一个数据库,将内容全部导出成A

   再将A导入到高版本确保A的信息完全转化成高版本的结构

   将高版本导出成低版本文件B

   比较AB的内容和结构

   B除某些少部分信息与结构,其他必须完全与低版本一致

3. 实现

  将A与B通过 dom 解析,取出各自的节点进行一一比较直到所有在A中的节点的位置和信息都与B中一致后,才可判定2者一致,由于导出时数据库的结构不同,XML的文件中节点的顺序可能不同在我们的软件中这种情况是可以认为是一致的。顺序不用考虑,因此要求UT忽略顺序

  比较主要分为3步

    1)在A和B中取出某个节点

    2)比较两个节点的信息是否一致

    3)比较这两个节点的子节点信息是否一致

  XML格式为树状结构,除根节点和叶子节点外每个节点均有父节点和子节点,另外本软件导出的文件只会有一个根节点

  因此可以进行递归查找进一步把流程改为:

    1)从A和B中取出根节点,对根节点进行compare(若一致则可以确定两文件内容、结构一致)

      

    2)compare流程

      (1)比较当前节点信息若不一致则返回失败

      (2)若一致,则取出AB所有的子节点,遍历A的子节点  去 B的子节点集中查找 (递归调用Compare进行判断)若所有A的子节点都能在B中找到,则判断AB节点相同(前提AB中子节点数量一致)

#include "ModelParser.h"
#include "IExporterDocumentTranslator.h"

时间: 2024-12-15 01:53:02

判断两个XML文件结构与内容是否相同的相关文章

比较两个XML节点编号---轻开平台(原WebEasy)字符串计算5

比较两个XML节点编号: @{subNode:n0.x.x(n0.x.x)}--返回比较结果 样例: @{subNode:c0.0(c0.0)} 返回0,表示是同一个节点 @{subNode:c0.0(c0.0.1)} 返回-1,表示是父节点 @{subNode:c0.0.1(c0.0)} 返回1,表示是子节点 @{subNode:c0.1.0(c0.0.1)} 返回differ(不同),表示没有关系 轻松准确在判断两个xml节点的上下层关系 轻松互联网开发平台(Easy Do IT)资源下载

判断两个对象内容相等

我们知道,如果两个对象即使内容,javascript也会判断它们不相等.但是有时候,我们仅仅需要判断两个对象的内容是否相等.那么我们应该如何做到且考虑周全呢?比如说0和-0,null和undefined,是不相等的,NaN和NaN默认是不相等的.我写了一个isEqual方法,考虑到了诸多方面,代码如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>&l

JavaSE8基础 String equalsIgnoreCase 判断两个字符串的内容是否相同 (不区分大小写)

os :windows7 x64    jdk:jdk-8u131-windows-x64    ide:Eclipse Oxygen Release (4.7.0)        code: package jizuiku.t02; public class Demo { public static void main(String[] args) { // 判断两个字符串的内容相同吗 不区分大小写 String s1 = "jizuiku"; String s2 = "a

JavaSE8基础 String equals 判断两个字符串的内容是否相同(区分大小写)

os :windows7 x64    jdk:jdk-8u131-windows-x64    ide:Eclipse Oxygen Release (4.7.0)        code: package jizuiku.t02; public class Demo { public static void main(String[] args) { // 判断两个字符串的内容相同吗 String s1 = "jizuiku"; String s2 = "abcdef&q

JavaScript判断两个对象内容是否相等

ES6中有一个方法判断两个对象是否相等,这个方法判断是两个对象引用地址是否一致 let obj1= { a: 1 } let obj2 = { a: 1 } console.log(Object.is(obj1, obj2)) // false let obj3 = obj1 console.log(Object.is(obj1, obj3)) // true console.log(Object.is(obj2, obj3)) // false 当需求是比较两个对象内容是否一致时就没用了. 想

C++文件操作,判断两个文件内容是否相等(被修改)

思路: 方法1:MD5校验文件内容. 方法2:获取文件最后修改时间. 这里介绍方法1 下载MD5类库 1.头部引用: #include "lib/md5.cpp" 2.自己写成一个function,param输入文件路径,return md5字符串 string compare(string folder1){ string fileName = folder1,content,str; unsigned int buf_size=1000000; //1M ifstream file

LeetCode:Same Tree - 判断两颗树是否相等

1.题目名称 Same Tree(判断两棵树是否相等) 2.题目地址 https://leetcode.com/problems/same-tree/ 3.题目内容 英文:Given two binary trees, write a function to check if they are equal or not. Two binary trees are considered equal if they are structurally identical and the nodes h

java 判断两个文件是否相同

使用java 如何判断两个文件是否相同呢? 我的做法是 (1)先比较两个文件内容的长度: (2)在长度相同的情况下,再比较两个文件的MD5值. [create md5]按钮用于记录source file的文件内容长度和MD5值. 运行主类:CheckSameApp package com.hw.main; import java.awt.BorderLayout;import java.awt.Container;import java.awt.Dimension;import java.awt

SWF运行时判断两个DisplayObject是否同个类型,属于flash professional库中的同一个元件

一般我们判断两个实例对象是否同样的类型,可以用typeof得到对象类型,然后用==号比较. typeof适用于原生类型. 而对于自定义类型,虽然typeof得到的都是Object,但还有更强的招数:getQualifiedClassName 利用这个原生函数可以获取到两个实例的真实类型. 然而,对于Flash professional制作出来的swf,运行时要知道其中两个MovieClip是否来自库里边的同一个元件,上述方法都无能为力了. 本文就是探讨这个问题. 1.首先,想到的是,如果两个实例