- 浏览: 5826390 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (890)
- WindowsPhone (0)
- android (88)
- android快速迭代 (17)
- android基础 (34)
- android进阶 (172)
- android高级 (0)
- android拾遗 (85)
- android动画&效果 (68)
- Material Design (13)
- LUA (5)
- j2me (32)
- jQuery (39)
- spring (26)
- hibernate (20)
- struts (26)
- tomcat (9)
- javascript+css+html (62)
- jsp+servlet+javabean (14)
- java (37)
- velocity+FCKeditor (13)
- linux+批处理 (9)
- mysql (19)
- MyEclipse (9)
- ajax (7)
- wap (8)
- j2ee+apache (24)
- 其他 (13)
- phonegap (35)
最新评论
-
Memories_NC:
本地lua脚本终于执行成功了,虽然不是通过redis
java中调用lua脚本语言1 -
ZHOU452840622:
大神://处理返回的接收状态 这个好像没有监听到 遇 ...
android 发送短信的两种方式 -
PXY:
拦截部分地址,怎么写的for(int i=0;i<lis ...
判断是否登录的拦截器SessionFilter -
maotou1988:
Android控件之带清空按钮(功能)的AutoComplet ...
自定义AutoCompleteTextView -
yangmaolinpl:
希望有表例子更好。。。,不过也看明白了。
浅谈onInterceptTouchEvent、onTouchEvent与onTouch
books.xml:
下面我们使用dom4j的xPath来解析:
segment of ParseXML.java:
Document doc = reader.read("books.xml");的意思是加载XML文档,此是可以用doc.asXML()来查看,它将打印整个xml文档。
Node root = doc.selectSingleNode("/books");是读取刚才加载的xml文档内的books节点下的所有内容,对于本例也是整个xml文档。
当然我们也可以加载/books下的某一个节点,如:book节点
Node root = doc.selectSingleNode("/books/book");
或:Node root = doc.selectSingleNode("/books/*");
注意:如果有多个book节点,它只会读取第一个
root.asXML()将打印:
<book show="yes" url="lucene.net">
<title id="456">Lucene Studing</title>
</book>
既然加载了这么多,那我怎么精确的得到我想要的节点呢,别急,看下面:
List list = root.selectNodes("book[@url='dom4j.com']");
它的意思就是读取books节点下的book节点,且book的节点的url属性为dom4j.com
为什么使用list来接收呢,如果有两个book节点,且它们的url属性都为dom4j.com,此时就封闭到list里了。
如果想读取books下的所有book节点,可以这样:
List list = root.selectNodes("book");
如果想读取books节点下的book节点下的title节点,可以这样:
List list2 = root.selectNodes("book[@url='dom4j.com']/title[@id='123']");
注意:selectNodes()参数的格式:
节点名[@属性名='属性值'],如:book[@url='dom4j.com']
如果有多个节点,用“/”分开,如:book[@url='dom4j.com']/title[@id='123']
最后就是读取封闭在List里的内容了,可以用Node来读取,也可以用Element来转换。
attributeValue("属性")是读取该节点的属性值
getText()是读取节点的的内容。
可参考:
http://newbutton.blog.163.com/blog/static/440539462007919115928634/
下面介绍一个复杂一点的例子,通过请求,从服务器传回一串xml格式的字符串,然后再parse方法中解析,就得到了TermInfo对象实例。
服务器传回的字符串如下:
<?xml version=\"1.0\" encoding=\"utf-8\"?><message><head><messageId>20100707163000062</messageId><result>0000</result><encryptionType>0</encryptionType><md>a4820454be3b0bcc42cb62884a8ef44e</md></head><body><termInfo winTermNo=\"10077\" preTermNo=\"\"><lotteryResult>0607091724|0212</lotteryResult><missCount >10,29,3,4,5,0,0,12,0,2,4,1,12,7,11,1,0,8,1,3,11,11,2,0,5,6,2,7,8,4,14,3,17,9,1|4,0,5,28,2,9,2,8,8,5,4,0</missCount ><limitNumber ></limitNumber ><salesVolume >51385724</salesVolume ><jackpot >68192388.87</jackpot ><winResult><win id=\"1\"><winCount>0</winCount><winMoney>0</winMoney><winAddCount>0</winAddCount><winAddMoney>0</winAddMoney></win><win id=\"2\"><winCount>3</winCount><winMoney>1018831</winMoney><winAddCount>1</winAddCount><winAddMoney>611298</winAddMoney></win><win id=\"3\"><winCount>38</winCount><winMoney>22364</winMoney><winAddCount>5</winAddCount><winAddMoney>13418</winAddMoney></win><win id=\"4\"><winCount>40</winCount><winMoney>3000</winMoney><winAddCount>9</winAddCount><winAddMoney>1500</winAddMoney></win><win id=\"5\"><winCount>1473</winCount><winMoney>600</winMoney><winAddCount>464</winAddCount><winAddMoney>300</winAddMoney></win><win id=\"6\"><winCount>6540</winCount><winMoney>100</winMoney><winAddCount>1573</winAddCount><winAddMoney>50</winAddMoney></win><win id=\"7\"><winCount>69490</winCount><winMoney>10</winMoney><winAddCount>18273</winAddCount><winAddMoney>5</winAddMoney></win><win id=\"8\"><winCount>832924</winCount><winMoney>5</winMoney></win></winResult><term termNo=\"10078\"><termStatus>1</termStatus><winStatus>1</winStatus><saleStatus>1</saleStatus><startTime></startTime><deadLine>20100707193000</deadLine><deadLine2>20100707190000</deadLine2><winLine>20100707220000</winLine><startTime2></startTime2><deadLine3>20100707200000</deadLine3><winLine2>20100707220000</winLine2><changeLine>20100905220000</changeLine><reserve></reserve></term></termInfo></body></message>
解析如下:
<![CDATA[你的有特殊字符的内容]]>,比如:
<message><![CDATA[salary<1000]]></message>
<?xml version="1.0" encoding="UTF-8"?> <books> <!--This is a test for dom4j, jakoes, 2007.7.19--> <book show="yes" url="lucene.net"> <title id="456">Lucene Studing</title> </book> <book show="yes" url="dom4j.com"> <title id="123">Dom4j Tutorials</title> </book> <book show="no" url="spring.org"> <title id="789">Spring in Action</title> </book> <owner>O'Reilly</owner> </books>
下面我们使用dom4j的xPath来解析:
segment of ParseXML.java:
public void parseBooks(){ SAXReader reader = new SAXReader(); try { Document doc = reader.read("books.xml"); Node root = doc.selectSingleNode("/books"); List list = root.selectNodes("book[@url='dom4j.com']"); for(Object o:list){ Element e = (Element) o; String show=e.attributeValue("show"); System.out.println("show = " + show); } } catch (Exception e) { e.printStackTrace(); } }
Document doc = reader.read("books.xml");的意思是加载XML文档,此是可以用doc.asXML()来查看,它将打印整个xml文档。
Node root = doc.selectSingleNode("/books");是读取刚才加载的xml文档内的books节点下的所有内容,对于本例也是整个xml文档。
当然我们也可以加载/books下的某一个节点,如:book节点
Node root = doc.selectSingleNode("/books/book");
或:Node root = doc.selectSingleNode("/books/*");
注意:如果有多个book节点,它只会读取第一个
root.asXML()将打印:
<book show="yes" url="lucene.net">
<title id="456">Lucene Studing</title>
</book>
既然加载了这么多,那我怎么精确的得到我想要的节点呢,别急,看下面:
List list = root.selectNodes("book[@url='dom4j.com']");
它的意思就是读取books节点下的book节点,且book的节点的url属性为dom4j.com
为什么使用list来接收呢,如果有两个book节点,且它们的url属性都为dom4j.com,此时就封闭到list里了。
如果想读取books下的所有book节点,可以这样:
List list = root.selectNodes("book");
如果想读取books节点下的book节点下的title节点,可以这样:
List list2 = root.selectNodes("book[@url='dom4j.com']/title[@id='123']");
注意:selectNodes()参数的格式:
节点名[@属性名='属性值'],如:book[@url='dom4j.com']
如果有多个节点,用“/”分开,如:book[@url='dom4j.com']/title[@id='123']
最后就是读取封闭在List里的内容了,可以用Node来读取,也可以用Element来转换。
attributeValue("属性")是读取该节点的属性值
getText()是读取节点的的内容。
可参考:
http://newbutton.blog.163.com/blog/static/440539462007919115928634/
下面介绍一个复杂一点的例子,通过请求,从服务器传回一串xml格式的字符串,然后再parse方法中解析,就得到了TermInfo对象实例。
服务器传回的字符串如下:
<?xml version=\"1.0\" encoding=\"utf-8\"?><message><head><messageId>20100707163000062</messageId><result>0000</result><encryptionType>0</encryptionType><md>a4820454be3b0bcc42cb62884a8ef44e</md></head><body><termInfo winTermNo=\"10077\" preTermNo=\"\"><lotteryResult>0607091724|0212</lotteryResult><missCount >10,29,3,4,5,0,0,12,0,2,4,1,12,7,11,1,0,8,1,3,11,11,2,0,5,6,2,7,8,4,14,3,17,9,1|4,0,5,28,2,9,2,8,8,5,4,0</missCount ><limitNumber ></limitNumber ><salesVolume >51385724</salesVolume ><jackpot >68192388.87</jackpot ><winResult><win id=\"1\"><winCount>0</winCount><winMoney>0</winMoney><winAddCount>0</winAddCount><winAddMoney>0</winAddMoney></win><win id=\"2\"><winCount>3</winCount><winMoney>1018831</winMoney><winAddCount>1</winAddCount><winAddMoney>611298</winAddMoney></win><win id=\"3\"><winCount>38</winCount><winMoney>22364</winMoney><winAddCount>5</winAddCount><winAddMoney>13418</winAddMoney></win><win id=\"4\"><winCount>40</winCount><winMoney>3000</winMoney><winAddCount>9</winAddCount><winAddMoney>1500</winAddMoney></win><win id=\"5\"><winCount>1473</winCount><winMoney>600</winMoney><winAddCount>464</winAddCount><winAddMoney>300</winAddMoney></win><win id=\"6\"><winCount>6540</winCount><winMoney>100</winMoney><winAddCount>1573</winAddCount><winAddMoney>50</winAddMoney></win><win id=\"7\"><winCount>69490</winCount><winMoney>10</winMoney><winAddCount>18273</winAddCount><winAddMoney>5</winAddMoney></win><win id=\"8\"><winCount>832924</winCount><winMoney>5</winMoney></win></winResult><term termNo=\"10078\"><termStatus>1</termStatus><winStatus>1</winStatus><saleStatus>1</saleStatus><startTime></startTime><deadLine>20100707193000</deadLine><deadLine2>20100707190000</deadLine2><winLine>20100707220000</winLine><startTime2></startTime2><deadLine3>20100707200000</deadLine3><winLine2>20100707220000</winLine2><changeLine>20100905220000</changeLine><reserve></reserve></term></termInfo></body></message>
解析如下:
import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.TreeMap; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.DocumentHelper; import org.dom4j.Element; import com.tlt.app.util.Constants; /** * 当前在售期彩期信息 * @author Administrator * */ public class TermInfo extends BaseModel{ private Head head; /*选填,最近一期开奖期号*/ private String winTermNo; /*选填,最近一期预售期号*/ private String preTermNo; /*最近开奖结果*/ private String lotteryResult; /*遗漏信息*/ private String missCount; /*限号信息*/ private String limitNumber; /*上期销量*/ private String salesVolume; /*奖池滚存*/ private String jackpot; /*最近开奖奖级结果*/ private WinResult winResult; /*正在销售彩期信息*/ private Term term; /*保留*/ private String reserve; /*出错信息*/ private String errorMsg; /*球队*/ private List<GameInfo> gameInfo; public List<GameInfo> getGameInfo() { return gameInfo; } public void setGameInfo(List<GameInfo> gameInfo) { this.gameInfo = gameInfo; } public String getWinTermNo() { return winTermNo; } public void setWinTermNo(String winTermNo) { this.winTermNo = winTermNo; } public String getPreTermNo() { return preTermNo; } public void setPreTermNo(String preTermNo) { this.preTermNo = preTermNo; } public String getErrorMsg() { return errorMsg; } public void setErrorMsg(String errorMsg) { this.errorMsg = errorMsg; } public Head getHead() { return head; } public void setHead(Head head) { this.head = head; } public String getLotteryResult() { return lotteryResult; } public void setLotteryResult(String lotteryResult) { this.lotteryResult = lotteryResult; } public String getMissCount() { return missCount; } public void setMissCount(String missCount) { this.missCount = missCount; } public String getLimitNumber() { return limitNumber; } public void setLimitNumber(String limitNumber) { this.limitNumber = limitNumber; } public String getSalesVolume() { return salesVolume; } public void setSalesVolume(String salesVolume) { this.salesVolume = salesVolume; } public String getJackpot() { return jackpot; } public void setJackpot(String jackpot) { this.jackpot = jackpot; } public WinResult getWinResult() { return winResult; } public void setWinResult(WinResult winResult) { this.winResult = winResult; } public Term getTerm() { return term; } public void setTerm(Term term) { this.term = term; } public String getReserve() { return reserve; } public void setReserve(String reserve) { this.reserve = reserve; } @Override public boolean parse(String xmlString) { // TODO Auto-generated method stub try { Document document = DocumentHelper.parseText(xmlString); Head head=new Head(); head.setMessageId(document.selectSingleNode("//message/head/messageId").getText()); head.setResult(document.selectSingleNode("//message/head/result").getText()); head.setEncryptionType(document.selectSingleNode("//message/head/encryptionType").getText()); head.setMd(document.selectSingleNode("//message/head/md").getText()); setHead(head); //如果返回失败信息,就没必要继续解析了 if(!head.getResult().equals(Constants.SUCCESS)){ setErrorMsg(document.selectSingleNode("//message/head/result").getText()+":"+document.selectSingleNode("//message/body/errorMsg").getText()); return false; } setWinTermNo(document.selectSingleNode("//message/body/termInfo/@winTermNo").getText()); setPreTermNo(document.selectSingleNode("//message/body/termInfo/@preTermNo").getText()); setLotteryResult(document.selectSingleNode("//message/body/termInfo/lotteryResult").getText()); setMissCount(document.selectSingleNode("//message/body/termInfo/missCount").getText()); setLimitNumber(document.selectSingleNode("//message/body/termInfo/limitNumber").getText()); setSalesVolume(document.selectSingleNode("//message/body/termInfo/salesVolume").getText()); setJackpot(document.selectSingleNode("//message/body/termInfo/jackpot").getText()); winResult=new WinResult(); Map<String,Win> winMap=new TreeMap<String,Win>();//需要排序 List list = document.selectNodes("//message/body/termInfo/winResult/win"); for (Iterator iter = list.iterator(); iter.hasNext();) { Win win=new Win(); Element winEle=(Element)iter.next(); win.setWinCount(winEle.element("winCount").getText()); win.setWinMoney(winEle.element("winMoney").getText()); if(winEle.element("winAddCount")!=null){//8等奖没有追加 win.setWinAddCount(winEle.element("winAddCount").getText()); win.setWinAddMoney(winEle.element("winAddMoney").getText()); }else{ win.setWinAddCount(""); win.setWinAddMoney(""); } String id=winEle.attribute("id").getValue(); win.setId(id); winMap.put(id,win); } winResult.setWin(winMap); setWinResult(winResult); Term term=new Term(); term.setTermNo(document.selectSingleNode("//message/body/termInfo/term/@termNo").getText()); term.setTermStatus(document.selectSingleNode("//message/body/termInfo/term/termStatus").getText()); term.setWinStatus(document.selectSingleNode("//message/body/termInfo/term/winStatus").getText()); term.setSaleStatus(document.selectSingleNode("//message/body/termInfo/term/saleStatus").getText()); term.setStartTime(document.selectSingleNode("//message/body/termInfo/term/startTime").getText()); term.setDeadLine(document.selectSingleNode("//message/body/termInfo/term/deadLine").getText()); term.setDeadLine2(document.selectSingleNode("//message/body/termInfo/term/deadLine2").getText()); term.setWinLine(document.selectSingleNode("//message/body/termInfo/term/winLine").getText()); term.setStartTime2(document.selectSingleNode("//message/body/termInfo/term/startTime2").getText()); term.setDeadLine3(document.selectSingleNode("//message/body/termInfo/term/deadLine3").getText()); term.setWinLine2(document.selectSingleNode("//message/body/termInfo/term/winLine2").getText()); term.setChangeLine(document.selectSingleNode("//message/body/termInfo/term/changeLine").getText()); term.setReserve(document.selectSingleNode("//message/body/termInfo/term/reserve").getText()); setTerm(term); List list_gameInfo = document.selectNodes("//message/body/termInfo/term/gameInfo/game"); gameInfo=new ArrayList<GameInfo>(); for (Iterator iter = list_gameInfo.iterator(); iter.hasNext();) { GameInfo info=new GameInfo(); Element gameInfoEle=(Element)iter.next(); info.setId(gameInfoEle.attributeValue("id")); info.setHomeTeam(gameInfoEle.element("homeTeam").getText()); info.setAwayTeam(gameInfoEle.element("awayTeam").getText()); info.setGameDate(gameInfoEle.element("gameDate").getText()); info.setLeagueMatch(gameInfoEle.element("leagueMatch").getText());//巴甲 info.setReserve(gameInfoEle.element("reserve").getText()); gameInfo.add(info); } setGameInfo(gameInfo); } catch (DocumentException e) { // TODO Auto-generated catch block e.printStackTrace(); return false; } return true; } }
<![CDATA[你的有特殊字符的内容]]>,比如:
<message><![CDATA[salary<1000]]></message>
发表评论
-
JDK中有关23个经典设计模式
2011-09-27 22:42 2042看原文吧,清楚些: http://www.iteye.com/ ... -
java生成jar压缩包并运行
2011-07-23 19:01 3113原帖: http://ankye1234.blog.163.c ... -
Android开发之Java集合类性能分析
2011-04-02 19:46 6975对于Android开发者来说深入了解Java的集合类很有必要主 ... -
一些Java经典算法
2010-09-10 16:38 2929package com.worthtech.app.uti ... -
java给图片加上水印
2010-07-02 14:08 1958package com.langhua.ImageUtil ... -
htmlparser API
2010-07-02 14:03 13139htmlparser所有的filter htmlpar ... -
UUID生成随机编号(适用于数字字母混编)
2010-03-10 16:35 7180UUID(Universally Unique Identif ... -
Java忽略大小写替换和提取字符信息
2009-12-01 09:27 46601. replaceAll 不区分大小写替换字符: Str ... -
java图片裁剪原理
2009-12-01 09:19 3409原文地址:http://blog.csdn.net/lql87 ... -
Java生成高品质缩略图
2009-12-01 09:14 3154import java.awt.image.Buffere ... -
FileReader读取中文txt文件编码丢失问题(乱码)
2009-11-19 16:06 25803有一个UTF-8编码的文本文件,用FileReader读取到一 ... -
实战java反射机制-让你迅速认识java强大的反射机制
2009-11-12 10:53 2081http://stephen830.iteye.com/blo ... -
利用jxl.jar读取EXCEL文件
2009-11-05 15:49 43901 从Excel文件读取数据表 ... -
Lucene整合"庖丁解牛"中文分词包
2009-10-26 15:03 2290版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声 ... -
lucene Analysis包分析
2009-10-26 13:39 3978算法和数据结构分析: 由于Analysis包比较简单,不详述 ... -
lucene学习笔记
2009-10-26 11:24 1714Lucene 其实很简单的,它最主要就是做两件事:建立索引和进 ... -
java实现截图和保存
2009-10-23 13:50 6029BufferedImage是个好类,和ImageIO和Grap ... -
java-Socket接受中文乱码的解决
2009-10-15 12:31 16260服务器发送一条数据如: BufferedReader in ... -
socket发送和接受数据
2009-10-14 14:13 2691import java.net.*; import ja ... -
java 实现判断某天是星期几
2009-09-25 13:41 6365首先对SimpleDateFormat有所了解,以下摘自jav ...
相关推荐
本篇文章将深入探讨如何使用Dom4j,一个流行的Java库,结合XPath来解析XML文件中的路径表达式,同时阐述相对路径和绝对路径的匹配原则。 首先,我们要了解Dom4j库。Dom4j是一个灵活且高效的处理XML的Java库,它提供...
NULL 博文链接:https://bbsanwei.iteye.com/blog/266394
### DOM4J解析XML详解 #### 一、DOM4J简介与特性 DOM4J是一个由dom4j.org开发的开源XML解析包,专为Java平台设计,它不仅支持DOM、SAX和JAXP标准,还巧妙地融入了Java集合框架,使其成为Java开发者在处理XML数据时...
- **dom4j+jaxen操作XML**:首先使用dom4j解析XML,然后通过jaxen创建XPath对象并执行查询。查询结果可以是元素、属性或其他XML节点,根据需要进行进一步处理。 例如,以下代码展示了如何使用dom4j和jaxen解析XML...
本文将详细介绍如何使用dom4j解析XML,并创建XML文档结构。 首先,我们需要引入dom4j库。如果你使用的是Maven项目,可以在pom.xml文件中添加以下依赖: ```xml <groupId>dom4j <artifactId>dom4j <version>...
DOM4J可以加载和解析XML文档,然后利用XPath表达式进行数据检索。这种方式避免了传统遍历DOM树的低效,尤其是在大型XML文档中,XPath的查询性能优势尤为明显。 在Java项目中,通常会将DOM4J和XPath的jar包打包在...
在Java编程中,解析XML文档通常需要借助库,如DOM4J和XPath。DOM4J是一个灵活且功能强大的开源Java XML API,它提供了XML的读取、写入、修改和遍历等功能。XPath则是W3C标准中的一个查询语言,用于在XML文档中查找...
为了使用这个库,你需要将该jar包添加到项目的类路径中,然后就可以通过DOM4J提供的类和方法来解析和操作XML文件了。 总之,DOM4J是一个功能强大的XML处理库,无论是在小型项目还是大型系统中,都能发挥其优势,...
本教程将重点讨论如何使用Java库Demo4j与XPath一起工作,以解析XML文件中的路径表达式。 首先,我们需要理解XPath的基本概念。XPath使用路径表达式来选取XML文档中的节点,这些路径表达式类似于文件系统中的路径。...
本篇学习笔记将深入探讨如何使用Dom4j解析XML文档,并结合XPath进行查询。 **一、Dom4j解析XML** 1. **添加依赖**:首先,你需要在项目中引入Dom4j库。如果是Maven项目,可以在pom.xml文件中添加以下依赖: ```xml...
【使用dom4j解析XML】 dom4j是一个强大的开源XML框架,它提供了处理XML文档的各种功能,包括解析、创建、修改等。相比W3C DOM API,dom4j的优势在于其内置的XPath支持,允许更方便地定位和操作XML文档中的节点。 *...
要开始解析XML文件,首先需要导入DOM4J的相关包: ```java import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.io.SAXReader; ``` 接下来,我们将创建...
本篇文章将详细介绍如何使用DOM(Document Object Model)和DOM4j这两种流行的方法来解析XML文件。 首先,DOM是一种标准的W3C推荐的解析XML的方法,它将整个XML文档加载到内存中,形成一个树形结构,便于程序进行...
Jaxen可以与多种XML解析器(如DOM、DOM4J、JDOM等)协同工作,提供跨平台的XPath支持。 总结来说,DOM4J是一个全面且易用的XML处理工具,广泛应用于Java开发中。通过`dom4j-1.6.1.jar`和`jaxen-1.1.1.jar`这两个jar...
DOM4J与XPath的结合使用,大大简化了XML处理的复杂度,提高了开发效率。在实际项目中,它们是处理XML数据不可或缺的工具。通过深入学习和实践,开发者可以更好地掌握XML的解析、操作和查询技术,提升项目中的数据...
Java DOM4J解析XML是一种常见的处理XML文档的技术,它提供了灵活且高效的API,使得开发者能够方便地读取、写入、修改以及操作XML文件。DOM4J是Java中一个非常强大的XML处理库,它结合了DOM、SAX和JDOM的优点,同时也...
2. **创建XML文件**:使用DOM4j创建一个新的XML文件,这通常涉及到`Document`、`Element`和`Writer`的使用。例如,你可以创建一个包含根元素和子元素的XML文件。 3. **动态创建XML节点**:在已有的XML文档中动态...