dom4j --用xpath排序xml
来源:互联网 发布:黑客摄像头监控软件 编辑:程序博客网 时间:2024/04/30 15:36
问题描述:
在dom4j中可以通过xpath过滤xml数据中的节点,并且可以进行排序。调用方法有两种:
方法一:org.dom4j.XPath
selectNodes(Object context, XPath sortXPath)
selectNodes evaluates the XPath expression on the given Nodeor Listof Nodes and returns the result as a List of Node s sorted by the sort XPath expression.
方法二:org.dom4j.Node
selectNodes(String xpathExpression, String comparisonXPathExpression)
selectNodes evaluates an XPath expression then sorts the results using a secondary XPath expression Returns a sorted List of Node instances.
解决方法:
扩展DefaultXPath自己实现了一个NumberXPath类,源码如下:
- package org.dom4j.xpath;
- import org.dom4j.Node;
- public class NumberXPath extends DefaultXPath{
- public NumberXPath(String text){
- super(text);
- }
- protected Object getCompareNumberValue(Node node) {
- return numberValueOf(node);
- }
- }
- package org.dom4j.xpath;
- import org.dom4j.Node;
- public class NumberXPath extends DefaultXPath{
- public NumberXPath(String text){
- super(text);
- }
- protected Object getCompareNumberValue(Node node) {
- return numberValueOf(node);
- }
- }
调用方法:
- String srcXML = "...xml文字..."; //参见xml文件
- Document doc = DocumentHelper.parseText(srcXML);
- List list = doc.selectNodes("doc/person/adds/add[@ID]");
- org.dom4j.XPath path =new NumberXPath("@ID");
- path.sort(list);
- //查看结果
- Iterator i1 = list.iterator();
- while(i1.hasNext()){
- Element element = (Element) i1.next();
- System.out.println(element.attributeValue("ID"));
- }
- String srcXML = "...xml文字..."; //参见xml文件
- Document doc = DocumentHelper.parseText(srcXML);
- List list = doc.selectNodes("doc/person/adds/add[@ID]");
- org.dom4j.XPath path =new NumberXPath("@ID");
- path.sort(list);
- //查看结果
- Iterator i1 = list.iterator();
- while(i1.hasNext()){
- Element element = (Element) i1.next();
- System.out.println(element.attributeValue("ID"));
- }
XML文件:
- <?xml version="1.0" encoding="GBK"?>
- <doc>
- <person>
- <name>某人</name>
- <adds>
- <add ID="01">
- <BS>10002</BS>
- <note>西安市太白路</note>
- </add>
- <add ID="02">
- <BS>10002</BS>
- <note>空ID节点啊</note>
- </add>
- <add ID="12">
- <BS>10002</BS>
- <note>空ID节点啊</note>
- </add>
- <add>
- <BS xmlns="10001"/>
- <note>西安市太白路2</note>
- </add>
- </adds>
- </person>
- </doc>
- <?xml version="1.0" encoding="GBK"?>
- <doc>
- <person>
- <name>某人</name>
- <adds>
- <add ID="01">
- <BS>10002</BS>
- <note>西安市太白路</note>
- </add>
- <add ID="02">
- <BS>10002</BS>
- <note>空ID节点啊</note>
- </add>
- <add ID="12">
- <BS>10002</BS>
- <note>空ID节点啊</note>
- </add>
- <add>
- <BS xmlns="10001"/>
- <note>西安市太白路2</note>
- </add>
- </adds>
- </person>
- </doc>
锁定Node.selectNodes(String arg1,String arg2);
arg1:xpath 语言,用来订位某个节点。
arg2:查到api是这么说的:is the XPath expression used to compare the results by for sorting
例如我要为A节点的m属性排序,则写法为:@m
对于降序,我从网上找来了方法:具体为:
File xmlFile = new File("...user.xml");
SAXReader reader = new SAXReader();
Document doc = reader.read(xmlFile);
List<Element> nodes = doc.selectNodes("//user", "@id"); //升序
for(Element e : nodes) {
System.out.println("id : " + e.attributeValue("id"));
System.out.println("name : " + e.attributeValue("name"));
}
System.out.println("----------------------------------");
Collections.reverse(nodes); //降序
for(Element e : nodes) {
System.out.println("id : " + e.attributeValue("id"));
System.out.println("name : " + e.attributeValue("name"));
使用了Collections对象
0 0
- dom4j --用xpath排序xml
- DOM4J+XPath 解析XML
- xml-dom4j-xpath
- dom4j通过xpath查询xml
- dom4j xpath 操作 xml 乱码
- Dom4j通过xpath查询xml
- xml解析dom4j xpath方式
- dom4j通过xpath查询xml
- dom4j通过xpath查询xml
- dom4j通过xpath查询xml
- dom4j通过xpath查询xml
- dom4j通过xpath查询xml
- dom4j通过xpath查询xml
- dom4j使用XPath解析xml
- dom4j通过xpath查询xml
- dom4j通过xpath查询xml
- xpath和dom4j解析xml
- dom4j用XPath解析xml 遇到的问题
- ipad iphone ios系统设备忘记密码如何修复 如何进入恢复模式
- html 鼠标事件,注释浮动框,提示文字
- Codeforces 510C - Fox And Names
- java外观模式
- webservice 客户端访问
- dom4j --用xpath排序xml
- Hibernate的描述文件1
- Android动态逆向分析工具ZjDroid--脱壳神器
- android ListView 单条刷新方法实践及原理解析
- 如何打开扩展名为.DB 文件. 使用sqlite3 很方便
- hibernate.cfg.xml配置0
- UVALive 3720 Highways 组合数学
- 第六篇 设计模式--建造者模式
- XMPP(三)-安卓即时通讯客户端