- 浏览: 66192 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
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 7107tomcat 6.0.33启动时,报错 he web app ... -
DB2联合数据库对象添加服务器
2011-04-29 10:55 2471(此文记录本次操作的全过程,可能有点凌乱。) 首先是一 ... -
DB2 编目远程数据库 出现 SQL30081N 通信错误,解决办法
2010-11-01 10:16 22999在客户端使用 DB2 控制中心(db2cc) 直接去编目远程数 ... -
Solaris下安装部署tomcat
2010-09-29 17:14 16911.安装JDK Solaris带有有jdk,在目录 /usr/ ... -
应用Spring,启动tomcat时Error listenerStart 和 Could not open ServletContext resource
2010-08-23 10:26 2891一。运用Spring时,一启动tomcat就出错Error l ...
相关推荐
Java解析和生成XML的知识点主要涵盖了使用JAXB(Java Architecture for XML Binding)框架...通过这种方式,可以很好地将Java对象转换为XML格式,并能够将XML文档内容重新解析回Java对象,实现数据的持久化存储和传输。
在Python中,可以使用`xml.etree.ElementTree`库,它提供了方便的API来解析和操作XML文档。例如,我们可以使用`ElementTree.parse()`函数加载XML文件,并通过`ElementTree.Element`对象遍历和提取数据。 接下来是...
1. **创建XML数据源**:在后台,你需要生成一个包含所需数据的XML文档。这个文档可以由服务器端的语言(如ASP.NET、PHP、Java等)动态生成,也可以是静态的XML文件。 2. **绑定数据源**:将生成的XML数据源绑定到...
5. **导出XML**:将生成的XML字符串写入文件,形成一个XML文档。这可以通过编程语言提供的文件操作API来实现,例如在Python中使用`xml.etree.ElementTree`模块,或者在Java中使用`DOM`或`JAXB`库。 6. **解析和验证...
综上所述,JAVA版的BM25排序模型是一个结合了信息检索、自然语言处理和JAVA编程技术的系统,它可以高效地处理文本数据,提供高质量的文档排名结果。理解并掌握这些知识点对于开发和维护这样的系统至关重要。
3. 实现`ContentHandler`接口,覆盖其中的回调方法,如`startElement()`、`endElement()`等,这些方法将在解析过程中被调用,用于处理XML文档的结构。 4. 将自定义的`ContentHandler`对象设置到`SAXParser`中。 5. ...
7. **源代码结构**:`Sort.java`文件可能包含了主程序类,其中包含了键盘输入、文件操作和排序的逻辑。它可能有一个`main`方法作为程序的入口点,以及其他的辅助方法来实现具体功能。 8. **编程实践**:良好的编程...
在本Java实验中,我们关注的是“排序GUI”的实现,这是一个结合了编程逻辑与用户界面设计的项目。这个实验的核心目标是创建一个图形用户界面(GUI),用户可以通过它来执行各种排序算法,如冒泡排序、选择排序、插入...
总之,“java二叉排序”结合了数据结构(二叉搜索树)和数据交换格式(XML),提供了在Java环境中对整数序列进行排序并将其持久化到XML文档的方法。这样的练习可以帮助开发者深化对两者概念的理解,并提高解决问题的...
- **自我描述**:XML文档包含关于自身数据结构的信息,使得数据易于理解。 - **标准化**:XML是由W3C(World Wide Web Consortium)制定的标准,具有广泛的行业支持。 - **独立性**:XML是一种公共格式,不属于任何...
- **DOM (Document Object Model)**:提供了一个面向对象的API来解析XML文档,使得开发者可以以树形结构操作XML文档。 - **SAX (Simple API for XML)**:这是一种基于事件的模型,适用于大型XML文件的处理,因为它不...
- **DOM 解析**:将 XML 文档加载到内存中,形成文档对象模型树。 - **SAX 解析**:逐行读取 XML 文件,是一种基于事件驱动的解析方式。 - **StAX 解析**:流式 API for XML,类似于 SAX,但更灵活,适用于大型 XML ...
Java的内置`java.sql`库可以连接数据库进行数据存储,或者使用NoSQL数据库如MongoDB,或者JSON文件来存储数据。 7. **错误处理**:在处理网络请求和XML解析时,错误处理至关重要。Java的异常处理机制(try-catch-...
Java 对大数据量文件内容的多线程读取和排序 在处理大数据量文件内容时,多线程读取和排序是非常重要的。下面我们将讨论如何使用 Java 对大数据量文件内容进行多线程读取和排序。 首先,我们需要生成一个随机的...
5. 存储和操作数据:现在,我们已经将XML文件的数据转换为Java对象,可以方便地进行各种操作,如排序、搜索、更新等。这些对象可以存储在集合(如ArrayList)中,或者持久化到数据库中。 6. 序列化和反序列化:为了...
在Java编程语言中,对中文字符串进行排序是一个相对复杂的问题,因为中文字符的排序不能简单地按照Unicode编码顺序来处理。通常,我们需要考虑汉字的拼音或者笔画等属性来进行排序。这里我们将详细介绍如何使用`...
Java操作XML是一个广泛的议题,涵盖了从解析XML文档到创建、修改和序列化XML的各种技术。在Java中,处理XML的主要库有DOM(Document Object Model)、SAX(Simple API for XML)和StAX(Streaming API for XML)。...
Java DOM(Document Object Model)是处理XML文档的一种方式,它提供了访问和操作XML文档的API,允许程序员通过Java代码来创建、修改和遍历XML文档。 在“XML_java_Dom的考生成绩管理”这个项目中,我们可能涉及到...
这种方式适合于需要频繁读写XML文档的场合,但对于大型文档来说,由于需要加载整个文档到内存,可能会导致性能问题。 **SAX (Simple API for 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 ...