1.一种遥感元数据的模糊XML压缩方法,其特征在于,包括以下步骤:
A:读取模糊XML文档,并以变量形式保存模糊XML文档的路径;
B:获取模糊XML文件中所有结点的结点信息并以Map类型变量存储,将模糊XML文件由XML类型转化为Map类型;
步骤B包括以下具体步骤:
B1:首先创建一个LinkedHashMap集合,以结点先序遍历的顺序来存储模糊XML文档的树形结构,并使用map_finall变量保存;然后创建一个file对象,file对象读入步骤A中得到的filepath变量,从而获取到模糊XML文件的信息;再使用解析器SAXReader()读入file对象将模糊XML文件解析为doc1变量,doc1变量类型为Document对象类型;
B2:首先通过getRootElement()方法获取doc1变量的根结点,并将根结点用rootElement变量保存;然后判断根结点是否含有子结点,若不含有子结点,则直接通过getNum()方法和getText()方法获取到根结点的结点信息,然后将得到的根结点的结点信息封装到map_finall变量中,并跳转到步骤B4;若含有子结点,则进入步骤B3;结点信息包括结点编号信息和结点属性信息;
B3:通过根结点调用递归方法recursion()获取到所有结点的结点信息;
B4:将集合map_finall以变量map另存,实现模糊XML文件由XML类型转化为Map类型;
C:将步骤B中得到的所有结点的结点信息转化为XML类型,再根据写入结点的位置写入结点,并更新写入结点的结点编码,最终将步骤B中得到的Map类型的模糊XML文件转化为XML类型;
步骤C包括以下具体步骤:
C1:首先创建一个Map类型的集合rootMap,存储结点信息,然后通过map.get(parentNum)方法将集合rootMap的初始值赋值为根结点的结点信息;再创建一个Document对象定义为doc2变量,用于获取变量map中结点的结点信息,同时将doc2变量的编码格式设置为“utf‑8”格式,再通过addElement(parentNum)方法依次向doc2变量中加入结点;其中,rootMap为自定义的集合名称,map.get(parentNum)为现有的获取根结点的结点信息的方法,addElement(parentNum)为现有的加入根结点的方法;
C2:通过getRootElement()方法获取到根结点,从根结点调用iterator()方法开始迭代,获取到所有结点的结点信息,并以String类型的变量xml保存;其中,iterator()方法为现有的集合迭代方法,xml为自定义的储存所有结点信息的变量名称;
C3:对迭代后获得的变量xml进行格式化;首先创建一个String类型的变量requestXML用于储存格式化后的变量xml,创建一个对象writer,对象writer为XMLWriter类型,对Map类型的模糊XML文件中的结点进行写入;requestXML为自定义的变量名称,writer为自定义的写入对象名称;
C4:创建Document对象定义为document变量,用于暂存中间文档,创建解析器reader用于解析读入变量xml,解析器reader为SAXReader解析器;然后通过解析器reader与StringReader(xml)方法对变量xml进行解析,并将解析后的xml以变量document临时储存;
然后创建一个变量stringWriter用于变量xml的字符串流写入,变量stringWriter为StringWriter对象,创建变量format用于规定转化后模糊XML文档的格式,变量format为OutputFormat对象,其中规定的格式包括每一级结点前设置空格缩进、变量xml声明和内容之间不添加空行、添加变量xml头部声明、设置编码格式为“GB2312”以及设置分行;变量document为自定义的变量名称,reader为自定义的解析器名称;StringReader(xml)方法为现有的以字符串流读取XML文档的方法,stringWriter为自定义的以字符串流写入对象名称,format为自定义的文档格式变量名称;
C5:通过xml.StandaloneWriter(stringWriter,format)方法将变量xml逐步写入到对象writer中,最终得到更新后的对象writer;其中,xml.StandaloneWriter(stringWriter,format)方法为现有的以字符串流写入的方法;
C6:将更新后的对象writer通过getBuffer()方法和toString()方法,以字符串流的形式储存到最终的变量requestXML中,所获得的变量requestXML即为转化后的模糊XML文档,即压缩后的模糊XML文档;
D:输出压缩后的模糊XML文档。
2.根据权利要求1所述的遥感元数据的模糊XML压缩方法,其特征在于,所述的步骤A中,将模糊XML文档的路径以变量filepath进行保存,filepath为自定义的变量名称。
3.根据权利要求2所述的遥感元数据的模糊XML压缩方法,其特征在于:所述的步骤B3包括以下具体步骤:首先定义一个flag标志变量,表示结点是否含有子结点;然后创建两个LinkedHashMap集合,分别定义为集合map_this和集合map_children,集合map_this存储本层所有结点的结点信息,map_children存储本层所有结点的所有子结点的结点信息;其中,flag为自定义的标志变量名称,集合map_this和集合map_children为自定义的集合名称;
其次,创建结点迭代器iterator对结点是否含有子结点进行判断,迭代器的初始值为根结点,然后通过iterator.hasNext()依次获取到根结点的所有子结点,再依次判断所有的子结点是否还存在子结点;flag变量的初始值为1,然后通过iterator.hasNext()所获取到的下一个结点的信息对flag变量进行赋值;
在对结点是否含有子结点进行判断时:
(1)如果flag=0,则说明该结点的所有首层子结点均有次层子结点,然后通过iterator.next()方法获取到所有的首层子结点,并依次对所有的首层子结点进行递归操作,继续判断每个首层子结点是否存在次层子结点;
(2)如果flag=1,则说明该结点的所有首层子结点均无次层子结点,则直接将该结点的结点信息封装到map_this变量中;
(3)如果flag=2,则说明该结点的部分首层子结点存在次层子结点,部分首层子结点不存在次层子结点;然后,对于所有不存在次层子结点的首层子结点,将首层子结点的结点信息直接封装在集合map_this中;对于存在次层子结点的首层子结点则进行递归操作,并将获取到的次层子结点的结点信息直接封装在集合map_this中;
最后,通过map_finall.put()方法将获取到的集合map_this所储存的所有的结点信息转存到集合map_finall中。
4.根据权利要求3所述的遥感元数据的模糊XML压缩方法,其特征在于:所述的步骤C5中,将结点的编码设置为
poss为结点的模糊度;
结点的写入包含结点的新增、删除和修改;在将变量xml逐步写入到对象writer过程中,首先判断结点的写入是结点的新增、删除或修改,若结点的写入是结点的删除或修改,则直接进行结点的删除或修改;若结点的写入是结点的新增,则分为两种情况进行操作:1:若对象writer中没有任何结点,设新增结点为结点v,则直接将新增的结点v写入对象writer中;2:若对象writer中已存在一个或多个结点,则设对象writer中最近写入的结点为结点u,新增结点为结点v,然后进行结点u和结点v关系的判断,以确定新增的v结点的位置:若结点u是结点v的父结点,则将结点v直接写入到结点u的下一个位置;
若结点v是结点u的父结点,则将结点v写入到结点u的上一个位置;
若结点v是结点u的兄弟结点,设结点p为结点v和结点u的父结点,结点q是与结点p同一层的结点,则将结点v写入到结点p的前两个位置;
在确定新增的结点v的位置后,对结点v的编码进行修改,将新增的结点v的结点编号通过对象writer中最近写入的结点u的“NodeNum”进行自增,然后再将结点v的信息写入对象writer中。
5.根据权利要求4所述的遥感元数据的模糊XML压缩方法,其特征在于:在进行结点u和结点v关系的判断时,定义结点u的编码为<f1,n1+node1+"/",p1,poss>,结点v的编码为<f2,n2+node2+"/",p2,poss>,则有:(1)结点u所在层次为“/”的个数;
(2)若f1≠f2,n1+node1+"/"=n2,且p1=p2,则结点u是结点v的父结点;
(3)若f1≠f2,n2+node2+"/"=n1,且p1=p2,则结点v是结点u的父结点;
(4)若f1≠f2,n1+node1+"/"=n2+node2+"/",且p1=p2,则结点v是结点u的兄弟结点。