日期:2014-05-19  浏览次数:20713 次

dom4j解析xml
最近在做关于爬虫的项目,通过抓取的网页,用jtidy解析转换成xml,然后通过dom4j去解析xml,得到网页中正文,标题之类的信息。

因为解析出来的xml中,body里面子节点N多个(DIV),目前我的想法是,获取所有的DIV,然后得到DIV下的子节点H1,然后得到H1里面的文本信息。

有没有类似经验的人给个建议???有代码最好。。
------最佳解决方案--------------------
text.xml

<?xml version="1.0" encoding="UTF-8"?>
<HD>
  <disk name="C">
    <capacity>8G</capacity>
    <directories>200</directories>
    <files>1580</files>
  </disk>

  <disk name="D">
    <capacity>10G</capacity>
    <directories>500</directories>
    <files>3000</files>
  </disk>
</HD> 


这里示范一下用jdom解析xml文件的步奏

import java.util.*;
import org.jdom.*;
import org.jdom.input.SAXBuilder;
public class Sample1 {
  public static void main(String[] args) throws Exception{ 
    SAXBuilder sb=new SAXBuilder();
    
    Document doc=sb.build(Sample1.class.getClassLoader().getResourceAsStream("text.xml")); //构造文档对象
    Element root=doc.getRootElement(); //获取根元素HD
    List list=root.getChildren("disk");//取名字为disk的所有元素
    for(int i=0;i<list.size();i++){
       Element element=(Element)list.get(i);
       String capacity=element.getChildText("capacity");//取disk子元素capacity的内容
       String directories=element.getChildText("directories");
       String files=element.getChildText("files");
       System.out.println("磁盘信息:");
       System.out.println("分区盘符:"+name);
       System.out.println("分区容量:"+capacity);
       System.out.println("目录数:"+directories);
       System.out.println("文件数:"+files);
       System.out.println("-----------------------------------");
    }  
  }


这只是一个入门,具体问题具体分析,呵呵
------其他解决方案--------------------
xml有dom4j帮忙解析,没什么搞不定的,至于要抓取什么信息,那就是楼主自己的事情了,帮不了你。
------其他解决方案--------------------
那就能得到了,不是吗?

还没明白楼主到底碰到什么问题了
------其他解决方案--------------------
直接循环取不就可以吗?
<body>
<div>
<h1>
</h1>
</div>
<div>
<h1>
</h1>
</div
</body>
你说的是这样结构吧
Element e=document.getRootElement();
for(Iterator i=e.elementIterator();i.hasNext()){
Element divElement=i.next();//得到div节点
for(Iterator j=divElement.elementIterator();i.hasNaxt()){
Element h1Element=j.next();
if("H1".equals(h1Element.getName())){
你要的东西
}
}
}
------其他解决方案--------------------
把<DIV></DIV> 这种东东都删掉,得到一个干净的xml后再处理不行吗.
------其他解决方案--------------------