- 浏览: 65809 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
antti:
jerome_wang 写道lz 写的好细渥 呵呵 帮我解决了 ...
Solaris下安装部署tomcat -
jerome_wang:
lz 写的好细渥 呵呵 帮我解决了不少问题
Solaris下安装部署tomcat
近日,工作中遇到一个有关XML文件内容进行排序的问题。经多方求教,加上本人的一点点努力,终于解决此问题。特此记录,以供其他朋友参详。
1. 问题描述
XML文档结构如下:
要求根据用户需求,对指定的某一列的值(如第六列,则根据每一个id=”6”的value值进行排序),指定的排序顺序,进行排序,然后根据该顺序,交换每个行(即节点row的位置)的位置
2.此重点在于如何把子节点col与其父节点进行关联,并且,当排序列的值相同时,不能去除重复的值,必须都参与排序。开始考虑用一般的排序方法,但是不能把父节点关联起来,最后经他人提醒,用TreeMap来排序,把col的值作为TreeMap的key,父节点作为value。但TreeMap会自动去掉重复值,因此,当col节点值相同时,他只去一个,为解决此问题,吧col值与父节点row的id联合作为key。解决此问题
3.主要java代码如下:
1. 问题描述
XML文档结构如下:
<?xml version="1.0" encoding="gb2312"?> <?xml-stylesheet type="text/xsl" title="master" href="./../../ReportXSL/master_sppg.xsl"?> <?xml-stylesheet type="text/xsl" title="detail" href="./../../ReportXSL/detail_sppg.xsl"?> <?xreport processor="withub.common.stat.xreport.AppendSQL" cache="false"?> <xreport id="80001" statBeginTime="2008-12-23 " statEndTime="2009-09-22 " statTime="2009-09-16"> <result> <col> <col colspan="1" id="-1" rowspan="1"/> <col colspan="1" id="1" name="xx数" rowspan="1"/> <col colspan="1" id="2" name="xx数" rowspan="1"/> <col colspan="1" format="##.##" id="3" name="同期xx率" operator="(col[1]/col[2])*100" rowspan="1"/> <col colspan="1" id="4" name="xx数" rowspan="1"/> <col colspan="1" id="5" name="xx数" rowspan="1"/> <col colspan="1" id="6" name="上一期末xx数" rowspan="1"/> <col colspan="1" format="##.##" id="7" name="xx率" operator="(col[4]/(col[5]+col[6]))*100" rowspan="1"/> </col> <row id="$001"> <row code="1300" colspan="1" id="$001" name="" rowspan="1" startExpand="1"/> <col format="" id="1" isLink="1" url="ZB_CODE=ZB_1_C1&CBFYBS=1300" value="3234"/> <col format="" id="2" isLink="1" url="ZB_CODE=ZB_1_C2&CBFYBS=1300" value="3388"/> <col format="##.##" id="3" isLink="0" value="95.45454545"/> <col format="" id="4" isLink="1" url="ZB_CODE=ZB_1_1_C1&CBFYBS=1300" value="3234"/> <col format="" id="5" isLink="1" url="ZB_CODE=ZB_1_1_C2&CBFYBS=1300" value="3388"/> <col format="" id="6" isLink="1" url="ZB_CODE=ZB_1_1_C3&CBFYBS=1300" value="894"/> <col format="##.##" id="7" isLink="0" value="75.52545539"/> </row> <row id="$002"> <row code="1301" colspan="1" id="$002" name="XX中院" rowspan="1"/> <col format="" id="1" isLink="1" url="ZB_CODE=ZB_1_C1&CBFYBS=1301" value="4596"/> <col format="" id="2" isLink="1" url="ZB_CODE=ZB_1_C2&CBFYBS=1301" value="5523"/> <col format="##.##" id="3" isLink="0" value="83.21564367"/> <col format="" id="4" isLink="1" url="ZB_CODE=ZB_1_1_C1&CBFYBS=1301" value="4596"/> <col format="" id="5" isLink="1" url="ZB_CODE=ZB_1_1_C2&CBFYBS=1301" value="5523"/> <col format="" id="6" isLink="1" url="ZB_CODE=ZB_1_1_C3&CBFYBS=1301" value="1422"/> <col format="##.##" id="7" isLink="0" value="66.17710583"/> </row> <row id="$003"> <row code="1302" colspan="1" id="$003" name="XX市X处" rowspan="1"/> <col format="" id="1" isLink="1" url="ZB_CODE=ZB_1_C1&CBFYBS=1302" value="2907"/> <col format="" id="2" isLink="1" url="ZB_CODE=ZB_1_C2&CBFYBS=1302" value="3183"/> <col format="##.##" id="3" isLink="0" value="91.32893497"/> <col format="" id="4" isLink="1" url="ZB_CODE=ZB_1_1_C1&CBFYBS=1302" value="2907"/> <col format="" id="5" isLink="1" url="ZB_CODE=ZB_1_1_C2&CBFYBS=1302" value="3183"/> <col format="" id="6" isLink="1" url="ZB_CODE=ZB_1_1_C3&CBFYBS=1302" value="852"/> <col format="##.##" id="7" isLink="0" value="72.04460967"/> </row> <row id="$004"> <row code="1303" colspan="1" id="$004" name="XX市X处" rowspan="1"/> <col format="" id="1" isLink="1" url="ZB_CODE=ZB_1_C1&CBFYBS=1303" value="3587"/> <col format="" id="2" isLink="1" url="ZB_CODE=ZB_1_C2&CBFYBS=1303" value="4444"/> <col format="##.##" id="3" isLink="0" value="80.71557156"/> <col format="" id="4" isLink="1" url="ZB_CODE=ZB_1_1_C1&CBFYBS=1303" value="3587"/> <col format="" id="5" isLink="1" url="ZB_CODE=ZB_1_1_C2&CBFYBS=1303" value="4444"/> <col format="" id="6" isLink="1" url="ZB_CODE=ZB_1_1_C3&CBFYBS=1303" value="757"/> <col format="##.##" id="7" isLink="0" value="68.96750625"/> </row> <row id="$005"> <row code="1304" colspan="1" id="$005" name="XX市X处" rowspan="1"/> <col format="" id="1" isLink="1" url="ZB_CODE=ZB_1_C1&CBFYBS=1304" value="3828"/> <col format="" id="2" isLink="1" url="ZB_CODE=ZB_1_C2&CBFYBS=1304" value="4961"/> <col format="##.##" id="3" isLink="0" value="77.16186253"/> <col format="" id="4" isLink="1" url="ZB_CODE=ZB_1_1_C1&CBFYBS=1304" value="3828"/> <col format="" id="5" isLink="1" url="ZB_CODE=ZB_1_1_C2&CBFYBS=1304" value="4961"/> <col format="" id="6" isLink="1" url="ZB_CODE=ZB_1_1_C3&CBFYBS=1304" value="772"/> <col format="##.##" id="7" isLink="0" value="66.77132391"/> </row> <row id="$006"> <row code="1305" colspan="1" id="$006" name="XX市X处" rowspan="1"/> <col format="" id="1" isLink="1" url="ZB_CODE=ZB_1_C1&CBFYBS=1305" value="2718"/> <col format="" id="2" isLink="1" url="ZB_CODE=ZB_1_C2&CBFYBS=1305" value="3884"/> <col format="##.##" id="3" isLink="0" value="69.97940268"/> <col format="" id="4" isLink="1" url="ZB_CODE=ZB_1_1_C1&CBFYBS=1305" value="2718"/> <col format="" id="5" isLink="1" url="ZB_CODE=ZB_1_1_C2&CBFYBS=1305" value="3884"/> <col format="" id="6" isLink="1" url="ZB_CODE=ZB_1_1_C3&CBFYBS=1305" value="334"/> <col format="##.##" id="7" isLink="0" value="64.43812233"/> </row> <row id="$007"> <row code="1306" colspan="1" id="$007" name="XX市X处" rowspan="1"/> <col format="" id="1" isLink="1" url="ZB_CODE=ZB_1_C1&CBFYBS=1306" value="6471"/> <col format="" id="2" isLink="1" url="ZB_CODE=ZB_1_C2&CBFYBS=1306" value="7979"/> <col format="##.##" id="3" isLink="0" value="81.10038852"/> <col format="" id="4" isLink="1" url="ZB_CODE=ZB_1_1_C1&CBFYBS=1306" value="6471"/> <col format="" id="5" isLink="1" url="ZB_CODE=ZB_1_1_C2&CBFYBS=1306" value="7979"/> <col format="" id="6" isLink="1" url="ZB_CODE=ZB_1_1_C3&CBFYBS=1306" value="1328"/> <col format="##.##" id="7" isLink="0" value="69.52831202"/> </row> <row id="$008"> <row code="1307" colspan="1" id="$008" name="XX市X处" rowspan="1"/> <col format="" id="1" isLink="1" url="ZB_CODE=ZB_1_C1&CBFYBS=1307" value="1352"/> <col format="" id="2" isLink="1" url="ZB_CODE=ZB_1_C2&CBFYBS=1307" value="1773"/> <col format="##.##" id="3" isLink="0" value="76.25493514"/> <col format="" id="4" isLink="1" url="ZB_CODE=ZB_1_1_C1&CBFYBS=1307" value="1352"/> <col format="" id="5" isLink="1" url="ZB_CODE=ZB_1_1_C2&CBFYBS=1307" value="1773"/> <col format="" id="6" isLink="1" url="ZB_CODE=ZB_1_1_C3&CBFYBS=1307" value="220"/> <col format="##.##" id="7" isLink="0" value="67.83743101"/> </row> <row id="$009"> <row code="1308" colspan="1" id="$009" name="XX市X处" rowspan="1"/> <col format="" id="1" isLink="1" url="ZB_CODE=ZB_1_C1&CBFYBS=1308" value="12727"/> <col format="" id="2" isLink="1" url="ZB_CODE=ZB_1_C2&CBFYBS=1308" value="14326"/> <col format="##.##" id="3" isLink="0" value="88.8384755"/> <col format="" id="4" isLink="1" url="ZB_CODE=ZB_1_1_C1&CBFYBS=1308" value="12727"/> <col format="" id="5" isLink="1" url="ZB_CODE=ZB_1_1_C2&CBFYBS=1308" value="14326"/> <col format="" id="6" isLink="1" url="ZB_CODE=ZB_1_1_C3&CBFYBS=1308" value="2021"/> <col format="##.##" id="7" isLink="0" value="77.85526396"/> </row> <row id="$010"> <row code="1309" colspan="1" id="$010" name="XX市X处" rowspan="1"/> <col format="" id="1" isLink="1" url="ZB_CODE=ZB_1_C1&CBFYBS=1309" value="4125"/> <col format="" id="2" isLink="1" url="ZB_CODE=ZB_1_C2&CBFYBS=1309" value="4851"/> <col format="##.##" id="3" isLink="0" value="85.03401361"/> <col format="" id="4" isLink="1" url="ZB_CODE=ZB_1_1_C1&CBFYBS=1309" value="4125"/> <col format="" id="5" isLink="1" url="ZB_CODE=ZB_1_1_C2&CBFYBS=1309" value="4851"/> <col format="" id="6" isLink="1" url="ZB_CODE=ZB_1_1_C3&CBFYBS=1309" value="1028"/> <col format="##.##" id="7" isLink="0" value="70.16499405"/> </row> <row id="$011"> <row code="1310" colspan="1" id="$011" name="XX市X处" rowspan="1"/> <col format="" id="1" isLink="0" url="ZB_CODE=ZB_1_C1&CBFYBS=$(CBFYBS)$" value="0"/> <col format="" id="2" isLink="0" url="ZB_CODE=ZB_1_C2&CBFYBS=$(CBFYBS)$" value="0"/> <col format="##.##" id="3" isLink="0" value="0"/> <col format="" id="4" isLink="0" url="ZB_CODE=ZB_1_1_C1&CBFYBS=$(CBFYBS)$" value="0"/> <col format="" id="5" isLink="0" url="ZB_CODE=ZB_1_1_C2&CBFYBS=$(CBFYBS)$" value="0"/> <col format="" id="6" isLink="0" url="ZB_CODE=ZB_1_1_C3&CBFYBS=$(CBFYBS)$" value="0"/> <col format="##.##" id="7" isLink="0" value="0"/> </row> <row id="$012"> <row code="1311" colspan="1" id="$012" name="XX市X处" rowspan="1"/> <col format="" id="1" isLink="1" url="ZB_CODE=ZB_1_C1&CBFYBS=1311" value="3751"/> <col format="" id="2" isLink="1" url="ZB_CODE=ZB_1_C2&CBFYBS=1311" value="5008"/> <col format="##.##" id="3" isLink="0" value="74.90015974"/> <col format="" id="4" isLink="1" url="ZB_CODE=ZB_1_1_C1&CBFYBS=1311" value="3751"/> <col format="" id="5" isLink="1" url="ZB_CODE=ZB_1_1_C2&CBFYBS=1311" value="5008"/> <col format="" id="6" isLink="1" url="ZB_CODE=ZB_1_1_C3&CBFYBS=1311" value="268"/> <col format="##.##" id="7" isLink="0" value="71.09552691"/> </row> </result> </xreport>
要求根据用户需求,对指定的某一列的值(如第六列,则根据每一个id=”6”的value值进行排序),指定的排序顺序,进行排序,然后根据该顺序,交换每个行(即节点row的位置)的位置
2.此重点在于如何把子节点col与其父节点进行关联,并且,当排序列的值相同时,不能去除重复的值,必须都参与排序。开始考虑用一般的排序方法,但是不能把父节点关联起来,最后经他人提醒,用TreeMap来排序,把col的值作为TreeMap的key,父节点作为value。但TreeMap会自动去掉重复值,因此,当col节点值相同时,他只去一个,为解决此问题,吧col值与父节点row的id联合作为key。解决此问题
3.主要java代码如下:
public void sortByTreeMap() throws Exception { XPathFactory factory = XPathFactory.newInstance(); XPath xpath = (XPath) factory.newXPath(); DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance(); domFactory.setNamespaceAware(true); // never forget this! DocumentBuilder builder = domFactory.newDocumentBuilder(); Document doc = builder.parse("stat3.xml"); XPathExpression exprCol = xpath.compile("//row/col[@id='6']"); Object cols = exprCol.evaluate(doc, XPathConstants.NODESET); NodeList colNodes = (NodeList) cols; // 升序排序 Comparator comp = new Comparator() { //针对Float型的排序 /* public int compare(Object o1, Object o2) { Float f1 = (Float) o1; Float f2 = (Float) o2; if (f1 == null && f2 == null) { return 0; } else if (f1 == null) { return -1; } else if (f2 == null) { return 1; } else if (f1 == f2) { return 1; } else { return f1.compareTo(f2); } }*/ public int compare(Object o1, Object o2) { int i,j,k; String strA,strB; strA = (String)o1; strB = (String)o2; i = strA.lastIndexOf('-'); j = strB.lastIndexOf('-'); //此处解决,当col节点值相等时,根据其父节点的id值排序,以免相等值被TreeMap自动剔除 k = new Float(strA.substring(0, i)).compareTo(new Float(strB.substring(0, j))); if(k == 0) return new Float(strA.substring(i+2, strA.length())).compareTo(new Float(strB.substring(j+2, strB.length()))); else return k; } }; // 降序排列 Comparator compDesc = new Comparator() { public int compare(Object o1, Object o2) { int i,j,k; String strA,strB; strA = (String)o1; strB = (String)o2; i = strA.lastIndexOf('-'); j = strB.lastIndexOf('-'); k = new Float(strB.substring(0, j)).compareTo(new Float(strA.substring(0, i))); if(k == 0) return new Float(strB.substring(j+2, strB.length())).compareTo(new Float(strA.substring(i+2, strA.length()))); else return k; } }; // TreeMap treeMap = new TreeMap(comp); TreeMap treeMap = new TreeMap(compDesc); // Element resultElem = (Element) result.item(0) ; for (int i = 0; i < colNodes.getLength(); i++) { Element colElem = (Element) colNodes.item(i); Element parentElem = (Element) colElem.getParentNode(); //把col的值和对应的row 的id值组成一个字符串,以解决自动去除重复值的问题 treeMap.put(colElem.getAttribute("value") + "-" + parentElem.getAttribute("id"), parentElem); } Iterator iter = treeMap.entrySet().iterator(); XPathExpression exprResult = xpath.compile("//result"); Element resultNode = (Element) exprResult.evaluate(doc, XPathConstants.NODE); int xuhao = 0; String temp = ""; //排序后,交换行其父节点位置 while (iter.hasNext()) { Map.Entry entry = (Map.Entry) iter.next(); Element newNode = (Element)entry.getValue() ; resultNode.appendChild(newNode); } saveXML("stat3-paixuDesc.xml", doc, "gb2312") ; } 本文同步发表到本人CSDN博客:http://blog.csdn.net/antti_king/archive/2009/09/16/4557582.aspx
发表评论
-
A web application registered the JBDC driver [com.mysql.jdbc.Driver] but failed
2011-10-25 15:48 7027tomcat 6.0.33启动时,报错 he web app ... -
DB2联合数据库对象添加服务器
2011-04-29 10:55 2436(此文记录本次操作的全过程,可能有点凌乱。) 首先是一 ... -
DB2 编目远程数据库 出现 SQL30081N 通信错误,解决办法
2010-11-01 10:16 22942在客户端使用 DB2 控制中心(db2cc) 直接去编目远程数 ... -
Solaris下安装部署tomcat
2010-09-29 17:14 16341.安装JDK Solaris带有有jdk,在目录 /usr/ ... -
应用Spring,启动tomcat时Error listenerStart 和 Could not open ServletContext resource
2010-08-23 10:26 2846一。运用Spring时,一启动tomcat就出错Error l ...
相关推荐
1. 定义一个接口处理文件,参数分别是列表文件路径和结果文件路径。 2. 将每个步骤单独写一个子方法,如解析xml,排序,写文件等等。
java实验 内容是有关排序的GUI 欢迎下载修改
java程序,从键盘输入字符串知道按确定键结束输入,将字符串保存于一个文件中,再从文件读取出来进行排序,将排序后的字符串保存在另一个文件中,从屏幕打印出排序后的字符串。
基于JAVA开发的BM25排序模型,文件格式为xml。压缩包中含有示例文件xml。
1.3 关于xml的几个问题 3 1.4 xml与html的比较 4 1.4.1 xml将数据与显示分开 5 1.4.2 xml对文档的格式要求更加严格 6 1.4.3 xml有且只能有一个根元素 6 1.5 xml的编辑工具 7 1.6 xml文档 8 1.6.1 xml声明 9 ...
java二叉排序程序示例,对输入的一系列的整数插入到xml文档中,xml的新手可以参考一下
1.3 关于xml的几个问题 3 1.4 xml与html的比较 4 1.4.1 xml将数据与显示分开 5 1.4.2 xml对文档的格式要求更加严格 6 1.4.3 xml有且只能有一个根元素 6 1.5 xml的编辑工具 7 1.6 xml文档 8 1.6.1 xml声明 9 ...
1.3 关于xml的几个问题 3 1.4 xml与html的比较 4 1.4.1 xml将数据与显示分开 5 1.4.2 xml对文档的格式要求更加严格 6 1.4.3 xml有且只能有一个根元素 6 1.5 xml的编辑工具 7 1.6 xml文档 8 1.6.1 xml声明 9 ...
1.3 关于xml的几个问题 3 1.4 xml与html的比较 4 1.4.1 xml将数据与显示分开 5 1.4.2 xml对文档的格式要求更加严格 6 1.4.3 xml有且只能有一个根元素 6 1.5 xml的编辑工具 7 1.6 xml文档 8 1.6.1 xml声明 9 ...
1.功能:该API为适用于Java平台下,通过后端程序代码调用API接口操作Excel文档。通过方法可实现如下功能: 1.1 文档格式转换:Excel转PDF/图片/HTML/XPS/SVG/XML/CSV/TIFF/ET/ETT/OFD/、XML转Excel等。 1.2 文档...
Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流。 Java绘制图片火焰效果 1个目标文件 摘要:Java源码,图形操作,火焰...
Sortpom Maven插件 ... 如果xml元素未排序,则mvn sortpom:verify仅对当前pom.xml文件进行排序。 此目标在验证pom是否已排序时会忽略文本格式(例如缩进和换行符)。 用法 Sortpom插件将对pom元素重新排序,并在
11.XmlReaer.java 读写xml文件 12.ArrayConvers.java 数组与map/list的转换 13.NumberCalc.java 对数字进行操作 14.ServerConn.java与ClientConn 先运行ServerConn.java 介绍了socket的通信 15.Arithmetic.java ...
Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流。 Java绘制图片火焰效果 1个目标文件 摘要:Java源码,图形操作,火焰...
这是一个将XML文档转换为JSON的项目。 它通过采用纪律严明的方法来创建简洁的JSON结构来实现此目的。 该库支持节点类型,例如注释和处理指令。 DTD在实验上受支持(将为它们创建一个节点),但是实体引用未打包,...
DTD是"有效XML文档"的必须文件,我们通过DTD文件来定义文档中元素和标识的规则及相互关系。如何建立一个DTD文件呢?让我们一起来学习: 1.设置元素 元素是XML文档的基本组成部分。你要在DTD中定义一个元素,然后...
用dom处理xml文档; 用sax处理xml文档; 用xslt转换xml; 对象与xml的转换; 18 java mail 使用smtp协议发送简单邮件; 发送带附件的邮件; 给多人发送邮件; 使用pop3接收邮件; 19jsp与servlet 获取客户端的真实ip地址;...
githup上开源项目 拖动排序 xml属性介绍,个人总结文档。
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...