才来几天,老大又给了我一个新的任务。不像曾经的建100个任务project那么坑爹,却还是顿时让我感觉压力山大。

由于在这之前,我改了他写的例程,用于生成新的任务项目,事实上任务项目就是通过XML文件进行參数传递,底层早已经封装好了。可是问题出来了,你新建任务须要传过去一个XML文件,可是server端生成任务还会返回一个XML文件,而我对于server端并不了解,我仅仅知道server生成了一个XML文件,可是它生成的XML中的參数是否和我传过去的參数同样?

所以老大要我写一个方法,去比对这两份XML文件。(自己传到server和server生成并返回的)

以后我都会称自己传到server为源文件,server生成返回的为目标文件

这一下倒是难到了我,由于第一,我对xml文件不熟;第二,我没有考虑好怎样去对照xml文件。

首先,xml文件里都是以string字符串的形式写入,在java程序中,事实上就是对照string。可是我不知道该怎么去比对这两个字符串,是比对字符串长度?不可能,源文件的长度肯定小于目标文件,目标文件会生成相应的任务名称,id等參数,而这些在源文件里是缺省的。

这让我感到绝望,只是好在有万能的baidu:他告诉我,java中有非常多封装好的类,能够将xml文件直接进行转化,比方:DOM。

原来还能够这样,于是我又查了查Document类,略去基础的不说,直奔主题:

这个DOM类能够直接对xml文档操作,能够读取xml文件,并生成一个对象,这个对象就是xml文件的树形化(xml也是类似于树结构,dom相当于直接生成这个数结构),那么我就能够直接訪问这个对象,对这个对象进行操作,比方能够得到子节点,得到根文件夹……

那么怎么使用dom呢?直接上代码不解释:

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException; import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException; //须要引入的包
@Override
public boolean compare(String sourcePath, String targetPath) {
<span style="white-space:pre"> </span>boolean result=false;
<span style="white-space:pre"> </span>File sourceFile = new File(sourcePath);
<span style="white-space:pre"> </span>File targetFile = new File(targetPath);
<span style="white-space:pre"> </span>Document sourceDoc = builder.parse(sourceFile);
<span style="white-space:pre"> </span>Document targetDoc = builder.parse(targetFile);
<span style="white-space:pre"> </span>simpleCompare(sourceDoc, targetDoc);
<span style="white-space:pre"> </span>try {
<span style="white-space:pre"> </span>Document sourceDoc = builder.parse(sourceFile);
<span style="white-space:pre"> </span>Document targetDoc = builder.parse(targetFile); <span style="white-space:pre"> </span>// DebugUtil.formatXML(sourceDoc);
<span style="white-space:pre"> </span>simpleCompare(sourceDoc, targetDoc);//简单对照 <span style="white-space:pre"> </span>} catch (SAXException e) {
<span style="white-space:pre"> </span>e.printStackTrace();
<span style="white-space:pre"> </span>} catch (IOException e) {
<span style="white-space:pre"> </span>e.printStackTrace();
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>return result;
}

上面代码大概就这么个意思,compare是个构造方法:方法内创建格式工厂,读取xml文件的路径,然后去解析这个xml文件,返回得到的Document对象(是一个树形的数据结构)。

那么实际就是操作sourceDoc和targetDoc这两个Document对象就能够了。

剩下那不是非常easy?于是,我找到了Document的方法:getChildNodes(),返回全部孩子的节点,以链表的形式,我当然能够觉得链表的名字就是xml标签名字,值为xml标签的值,所以我就能够进行对照了。于是又是洋洋洒洒一段代码。

public boolean simpleCompare(Document sourceDoc,Document targetDoc){
// Element sourceRoot = sourceDoc.getDocumentElement(); //得到源文件的根节点
Element targetRoot = targetDoc.getDocumentElement(); //得到目标文件的根节点 // HashSet<String> sourceSet =new HashSet<String>(); //创建哈希表
// HashSet<String> targetSet =new HashSet<String>();
// HashSet<String> sourceNames=getNodeNames(sourceRoot,sourceSet); //一个创建哈希表函数
// HashSet<String> targetNames=getNodeNames(targetRoot,targetSet); NodeList sourceNodes = sourceDoc.getChildNodes(); //得到源文件的孩子,为了进行对照
NodeList targetNodes = targetDoc.getChildNodes(); int sourceLength = sourceNodes.getLength();
int targetLength = targetNodes.getLength();
int i = 0,j = 0;
for (i = 0; i < sourceLength; i++) {
String name = sourceNodes.item(i).getNodeName();
String value = sourceNodes.item(i).getNodeValue();
for (j = 0; j < targetLength; j++) {
if (name.equals(targetNodes.item(j).getNodeName())) {
if (value.equals(sourceNodes.item(j).getNodeValue())) { }
else {
return false;//假设值不正确,说明对照错误
}
}
}
if(j == targetLength){ //假设一直没有在目标文件里找到,说明对照错误
return false;
}
}
return true;
}

本以为这样都就能够完毕对照的任务了,可是当我拿两份内容一样的xml文件去对照,console里返回的都是false,这让我变得非常忧伤。

至于为什么,肯定是哪里出现故障了,所以我要输出来看一看,究竟出了什么错。

測试之路2——对照XML文件1的更多相关文章

  1. 測试之路3——对照XML文件2

    距离上一篇对照xml文件隔了非常久,并不代表一直做了那么久. 事实上上一次对照xml文件一直出错,事实上我忽略了一个非常easy的问题:我从根文件夹下得到的全部孩子,是这个根下的,而xml文件的组织形 ...

  2. Android Gradle Plugin指南(四)——測试

    原文地址:http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Testing 5.Testing(測试) 构建一个測试 ...

  3. Android程序解析XML文件的方法及使用PULL解析XML案例

    一.一般解析XML文件的方法有SAX和DOM.PULL (1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信 ...

  4. 使用SAX解析XML文件

    SAX这是Simple API for XML缩写,它不是由引起W3C拟议标准正式.尽管如此,使用SAX很少几个,点儿全部的XML解析器都会支持它. 与DOM比較而言,SAX是一种轻量型的方法. 我们 ...

  5. eclipse下的ssh框架整合过程及測试

    最近在搭建Stuts2+hibernate+spring的框架,网上看的教程,大部分都是非常easy的步骤.没有比較具体的步骤以及每一个步骤完毕之后怎样检查是否配置成功.下面是笔者依据自己搭建的过程进 ...

  6. [单元測试]_[VC2010使用gtest单元測试入门]

    场景: 1. gtest作为C++的单元測试工具非常优秀了,它集成了非常多标准assert所没有的功能,比方让流程继续运行的EXPECT,仅仅測试特定測试用例的--gtest_filter, 输出xm ...

  7. Maven实现Web应用集成測试自己主动化 -- 測试自己主动化(WebTest Maven Plugin)

    近期在appfuse看到使用webtest-maven-plugin实现Web应用的集成測试,研究了下.感觉很不错.对于Web应用自己主动构建很有帮助,在性能測试之前能够保证Web应用的基本功能工作正 ...

  8. Hdfs的ACL測试

    Hadoop从2.4.0版本号開始支持hdfs的ACL,在CDH5.0其中也集成了该特性,以下对其进行一些測试: unnamed user (file owner) 文件的拥有者 unnamed gr ...

  9. Mock+Proxy在SDK项目的自己主动化測试实战

    项目背景 广告SDK项目是为应用程序APP开发者提供移动广告平台接入的API程序集合,其形态就是一个植入宿主APP的jar包.提供的功能主要有以下几点: - 为APP请求广告内容 - 用户行为打点 - ...

随机推荐

  1. 【Web探索之旅】第一部分:什么是Web?

    内容简介 1.Web探索之旅:开宗明义 2.第一部分第一课:什么是Web? 3.第一部分第二课:Web,服务和云 4.第一部分第三课:Web的诞生史 Web探索之旅:开宗明义 大家好. 我们这个系列课 ...

  2. Oracle 六闪回技术,flashback

    Flashback 技术基于Undo segment基于内容的, 因此,限制UNDO_RETENTON参数. 要使用flashback 特征,您必须启用自己主动撤销管理表空间. 在Oracle 11g ...

  3. js运动动画

    原文:js运动动画 今天简单的学了一下js运动动画,再此感谢慕课网的这位老师http://www.imooc.com/view/167,讲的很不错. 下面是我整理出来的结果. 知识点一:速度动画. 1 ...

  4. ASP.NET自定义控件组件开发 第四章 组合控件开发CompositeControl

    原文:ASP.NET自定义控件组件开发 第四章 组合控件开发CompositeControl 第四章 组合控件开发CompositeControl 大家好,今天我们来实现一个自定义的控件,之前我们已经 ...

  5. String构造函数originalValue.length&gt;size 它发生

    最近观看Jdk6于String源代码被发现String这种施工方法有.源内容如下面: public String(String original) { int size = original.coun ...

  6. JAVA Socket传输Object(对象)注意的问题

    在java中,可以通过socket将一个对象进行传递,通过ObjectOutputStream,ObjectInputStream来进行写入和读取(具体的方法参考http://blog.csdn.ne ...

  7. CSS——(2)与标准流盒模型

    部分博客<CSS--(1)基础>中简介了CSS的概念和几种用法,如今主要是介绍其的核心内容. 盒子模型 为了理解盒子模型,我们能够先从生活中的盒子入手.盒子是用来放置物品的,内部除了有物品 ...

  8. JVM的参数详解(转)

    12年毕业到先在处理第一年外这几年纯属于打酱油,当初自学Java然后就出来找工作了,还有第一家面试就通过了挺幸运的 但之后的这段时间一直是处于吃老本的状态.最近心情真的很不好,各种黄老邪!一直处于堕落 ...

  9. 原代码,反码,解释和具体的补充 Java在&gt;&gt;和&gt;&gt;&gt;差异

    前两天分析 HashMap 的 hash 算法的时间,会见 >> 和 >>> 这两个符号.然后检查以下信息,我脑子里在某一时刻.今天遇到,我没想到居然忘  0-0.... ...

  10. 红帽/CentOS ext4无法格式化大分区 补充ext4格式化方式

    普通情况下,XFS出现丢数据的情况为海量小文件IO场景.在该场景下,inode占用教大. 通过上文的方式进行格式化,inode数量较小.通过大量測试,能够使用例如以下方法提升mkfs.ext4后文件系 ...