DOM4J+XPath 解析XML
来源:互联网 发布:bej48 知乎 编辑:程序博客网 时间:2024/06/10 05:11
获取XML文档中某个节点可以通过getChildren()方法,此方法是遍历全部的节点后,才返回要得到元素的集合。
当小点的xml文档此方法还可以,当xml文档中含有大量的节点,效率是不是很低呀!!!
现在用DOM4J+XPath来解析大文档XML。
环境搭建:1:dom4j 2:jaxen.1.1.1.jar
Url.xml
此xml是抓取的Google首页上的所有链接。
<?xml version="1.0" encoding="UTF-8"?>
<url>
<link id="0">
<name>网页</name>
<url>http://www.google.cn/webhp?hl=zh-CN&tab=iw</url>
</link>
<link id="1">
<name>视频</name>
<url>http://video.google.cn/?hl=zh-CN&tab=iv</url>
</link>
<link id="2">
<name>地图</name>
<url>http://ditu.google.cn/maps?hl=zh-CN&tab=il</url>
</link>
<link id="3">
<name>资讯</name>
<url>http://news.google.cn/nwshp?hl=zh-CN&tab=in</url>
</link>
<link id="4">
<name>音乐</name>
<url>http://www.google.cn/music?hl=zh-CN&tab=iU</url>
</link>
<link id="5">
<name>财经</name>
<url>http://www.google.cn/finance?hl=zh-CN&tab=ie</url>
</link>
<link id="6">
<name><u>更多</u> &raquo;</name>
<url>http://www.google.cn/intl/zh-CN/options/</url>
</link>
<link id="7">
<name>登录</name>
<url>
https://www.google.com/accounts/Login?hl=zh-CN&continue=http://images.google.cn/
</url>
</link>
<link id="8">
<name />
<url />
</link>
<link id="9">
<name>高级图片搜索</name>
<url>
http://images.google.cn/advanced_image_search?hl=zh-CN
</url>
</link>
<link id="10">
<name>使用偏好</name>
<url>http://images.google.cn/preferences?hl=zh-CN</url>
</link>
<link id="11">
<name>潮流女星</name>
<url>
http://images.google.cn/imgcat?hl=zh-CN&amp;num=10&amp;newwindow=1&amp;output=search&amp;ie=UTF-8&amp;cid=2&amp;sa=h&amp;seq=2_6_7_5_1
</url>
</link>
<link id="12">
<name>精美壁纸</name>
<url>
http://images.google.cn/imgcat?hl=zh-CN&amp;num=10&amp;newwindow=1&amp;output=search&amp;ie=UTF-8&amp;cid=6&amp;sa=h&amp;seq=2_6_7_5_1
</url>
</link>
<link id="13">
<name>爆笑趣图</name>
<url>
http://images.google.cn/imgcat?hl=zh-CN&amp;num=10&amp;newwindow=1&amp;output=search&amp;ie=UTF-8&amp;cid=7&amp;sa=h&amp;seq=2_6_7_5_1
</url>
</link>
<link id="14">
<name>游戏动漫</name>
<url>
http://images.google.cn/imgcat?hl=zh-CN&amp;num=10&amp;newwindow=1&amp;output=search&amp;ie=UTF-8&amp;cid=5&amp;sa=h&amp;seq=2_6_7_5_1
</url>
</link>
<link id="15">
<name>生活时尚</name>
<url>
http://images.google.cn/imgcat?hl=zh-CN&amp;num=10&amp;newwindow=1&amp;output=search&amp;ie=UTF-8&amp;cid=1&amp;sa=h&amp;seq=2_6_7_5_1
</url>
</link>
<link id="16">
<name>广告计划</name>
<url>http://images.google.cn/intl/zh-CN/ads/</url>
</link>
<link id="17">
<name>Google 大全</name>
<url>http://images.google.cn/intl/zh-CN/about.html</url>
</link>
<link id="18">
<name>ICP证合字B2-20070004号</name>
<url>http://www.miibeian.gov.cn/</url>
</link>
<link id="19">
<name />
<url />
</link>
</url>
TestDOM4JXpath.java
import java.io.File;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
public class DOM4JXpath {
public void parseXmlSimple(String fileName){
SAXReader reader = new SAXReader();
File file = new File(fileName);
try {
/* 是读取刚才加载的xml文档内的url根节点下的所有内容,
* 当然我们也可以加载/url下的某一个节点,如:link节点
* Node root = doc.selectSingleNode("/url/link");
* 或:Node root = doc.selectSingleNode("/url/*");
* 注意:如果有多个link节点,它只会读取第一个
* */
Document document = reader.read(file);
/*
* 注意:selectNodes()参数的格式:
* 节点名[@属性名='属性值'],如:link[@id='17']
* 如果有多个节点,用“/”分开,如:link[@id='17']/title[@id='123']
* */
Node root = document.selectSingleNode("/url");
List list = root.selectNodes("link[@id='17']/name");
/*
* 读取url节点下的link节点,且link的节点的id属性为17
* 为什么使用list来接收呢,如果有两个link节点,且它们的id属性都为17,此时就封闭到list里了
* 如果想读取url下的所有link节点,可以这样:
* List list = root.selectNodes("link");
* */
for(Object object:list){
Element element= (Element)object;
String name = element.getText();
System.out.println(name);
}
list = root.selectNodes("link[@id='17']/url");
Iterator it = list.iterator();
if(it.hasNext()){
Element element = (Element)it.next();
String url = element.getText();
System.out.println("url "+url);
}
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String args[]){
TestDOM4JXpath dx = new TestDOM4JXpath();
long start = System.currentTimeMillis();
dx.parseXmlSimple("url.xml");
String time = (System.currentTimeMillis() - start)+" MS";
System.out.println(time);
}
}
- DOM4J+XPath 解析XML
- xml解析dom4j xpath方式
- dom4j使用XPath解析xml
- xpath和dom4j解析xml
- 使用dom4j的xPath解析XML
- dom4j(xpath)解析xml一例
- Dom4j解析XML文件(Xpath)
- XML 的 Dom4j 解析范例,以及 XPath
- DOM4J解析XML(强大的XPath)
- xml解析 dom4j通过XPath找标签
- XML语言学习5--DOM4J解析+xpath
- 采用Dom4j及xpath解析xml文件
- 使用dom4j的xPath解析XML
- xml解析-dom4j对XPATH的支持
- java---dom4j+xpath演示解析XML文档
- 使用dom4j的xPath解析XML
- Dom4j和XPath的XML解析技术
- XML介绍以及XML解析入门---DOM4J解析、XPath解析
- 使用VIM是一种信仰
- 略谈vimrc心得
- sql 练习题 - 找出字符串出现的次数
- SQL 语句的解析顺序
- mysql 的存储过程一定要带()
- DOM4J+XPath 解析XML
- aaaaaaaaaa
- 嵌入式
- 回家了。。。
- List Vecter Map Set 比较
- 放假学C++
- 幸福 是一种能力
- java基础 7月17日
- pool memory allocate in SGI STL