java + dom4j.jar提取xml文档内容

所属分类: 软件编程 / java 阅读数: 34
收藏 0 赞 0 分享

本文实例为大家分享了java + dom4j.jar提取xml文档内容的具体代码,供大家参考,具体内容如下

资源下载页:点击下载

本例程主要借助几个遍历的操作对xml格式下的内容进行提取,操作不是最优的方法,主要是练习使用几个遍历操作。

xml格式文档内容:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE nitf SYSTEM "http://www.nitf.org/IPTC/NITF/3.3/specification/dtd/nitf-3-3.dtd"> 
-<nitf version="-//IPTC//DTD NITF 3.3//EN" change.time="19:30" change.date="June 10, 2005">
 
 
-<head>
 
<title>An End to Nuclear Testing</title>
 
<meta name="publication_day_of_month" content="7"/> 
<meta name="publication_month" content="7"/> 
<meta name="publication_year" content="1993"/> 
<meta name="publication_day_of_week" content="Wednesday"/> 
<meta name="dsk" content="Editorial Desk"/> 
<meta name="print_page_number" content="14"/> 
<meta name="print_section" content="A"/> 
<meta name="print_column" content="1"/>
<meta name="online_sections" content="Opinion"/>
 
 
-<docdata>
 
<doc-id id-string="619929"/>
 
<doc.copyright year="1993" holder="The New York Times"/>
 
 
-<identified-content>
 
<classifier type="descriptor" class="indexing_service">ATOMIC WEAPONS</classifier> 
<classifier type="descriptor" class="indexing_service">NUCLEAR TESTS</classifier> 
<classifier type="descriptor" class="indexing_service">TESTS AND TESTING</classifier> 
<classifier type="descriptor" class="indexing_service">EDITORIALS</classifier> 
<person class="indexing_service">CLINTON, BILL (PRES)</person> 
<classifier type="types_of_material" class="online_producer">Editorial</classifier> 
<classifier type="taxonomic_classifier" class="online_producer">Top/Opinion</classifier> 
<classifier type="taxonomic_classifier" class="online_producer">Top/Opinion/Opinion</classifier> 
<classifier type="taxonomic_classifier" class="online_producer">Top/Opinion/Opinion/Editorials</classifier> 
<classifier type="general_descriptor" class="online_producer">Nuclear Tests</classifier> 
<classifier type="general_descriptor" class="online_producer">Atomic Weapons</classifier> 
<classifier type="general_descriptor" class="online_producer">Tests and Testing</classifier> 
<classifier type="general_descriptor" class="online_producer">Armament, Defense and Military Forces</classifier>
 
</identified-content> 
</docdata> 
<pubdata name="The New York Times" unit-of-measure="word" item-length="390" ex-ref="http://query.nytimes.com/gst/fullpage.html?res=9F0CEFDF1439F934A35754C0A965958260" date.publication="19930707T000000"/>
 
</head>
 
 
-<body>
 
 
-<body.head>
 
 
-<hedline>
 
<hl1>An End to Nuclear Testing</hl1>
 
</hedline> 
</body.head>
 
 
-<body.content>
 
 
-<block class="lead_paragraph">
 
<p>For nearly half a century, test explosions in the Nevada desert were a reverberating reminder of cold war insecurity. Now the biggest worry is nuclear proliferation, not the Soviet threat. That's why President Clinton has quietly decided to extend the moratorium on tests of nuclear arms for at least 15 months.</p> 
<p>To persuade nuclear have-nots to stay out of the bomb-making business, it makes more sense to halt testing and try to get others to do likewise than to conduct more demonstrations of America's deterrent power.</p>
 
</block>
 
 
-<block class="full_text">
 
<p>For nearly half a century, test explosions in the Nevada desert were a reverberating reminder of cold war insecurity. Now the biggest worry is nuclear proliferation, not the Soviet threat. That's why President Clinton has quietly decided to extend the moratorium on tests of nuclear arms for at least 15 months.</p>
<p>To persuade nuclear have-nots to stay out of the bomb-making business, it makes more sense to halt testing and try to get others to do likewise than to conduct more demonstrations of America's deterrent power.</p> 
<p>Not that nuclear wannabes will necessarily follow America's lead. Nor will an end to all testing assure an end to bomb-making; states like Pakistan have developed nuclear devices without testing them first.</p>
<p>But calling a halt to U.S. nuclear testing makes it easier for leaders in Russia and France to extend the moratoriums they are now observing and improve the atmosphere for prompt negotiation of a treaty to ban all tests.</p>
<p>That test ban in turn should shore up international support for the 1968 Nonproliferation Treaty, linchpin of efforts to stop the spread of nuclear arms, when it comes up for review in 1995. It will also bolster the backing for tighter controls on exports used in bomb-making.</p>
<p>Mr. Clinton has taken three helpful steps. He has extended the Congressionally mandated moratorium on U.S. tests that was due to expire last week. He has declared that the U.S. will not test unless another nation does so first. And he wants to negotiate a total ban on testing.</p>
<p>But the President also wants the nuclear labs to be prepared for a prompt resumption of warhead safety and reliability tests. This could cost millions of dollars and doesn't make much sense, since in Mr. Clinton's own words, "After a thorough review, my Administration has determined that the nuclear weapons in the United States' arsenal are safe and reliable."</p>
<p>Moreover, preparations for testing can take on a life of their own: 30 years after the Limited Test Ban Treaty put an end to above-ground tests, the U.S. still spends $20 million a year on Safeguard C, a program to keep test sites ready.</p>
<p>American security no longer rests on that sort of eternal nuclear vigilance. Mr. Clinton's moratorium may make America safer than all the tests and preparations for tests that the nuclear labs can dream up.</p>
 
</block>
 
</body.content>
 
</body>
 
</nitf>

提取代码:

对多文件进行操作,首先遍历所有文件路径,存到遍历器中,然后对遍历器中的文件路径进行逐一操作。

package com.njupt.ymh;
 
import java.io.File;
import java.util.ArrayList;
import java.util.List;
 
import edu.princeton.cs.algs4.In;
 
/**
 * 返回文件名列表
 * @author 11860
 *
 */
public class SearchFile {
 
 public static List<String> getAllFile(String directoryPath,boolean isAddDirectory) {
  List<String> list = new ArrayList<String>(); // 存放文件路径
  File baseFile = new File(directoryPath); // 当前路径
  
  if (baseFile.isFile() || !baseFile.exists()) 
   return list;
  
  File[] files = baseFile.listFiles(); // 子文件
  for (File file : files) {
   if (file.isDirectory()) 
   { 
    if(isAddDirectory) // isAddDirectory 是否将子文件夹的路径也添加到list集合中
     list.add(file.getAbsolutePath()); // 全路径
    
    list.addAll(getAllFile(file.getAbsolutePath(),isAddDirectory));
   } 
   else 
   {
    list.add(file.getAbsolutePath());
   }
  }
  return list;
 }
 public static void main(String[] args) {
 
 //SearchFile sFile = new SearchFile();
 List<String> listFile = SearchFile.getAllFile("E:\\huadai", false);
 System.out.println(listFile.size());
 File file = new File(listFile.get(3));
 In in = new In(listFile.get(4));
 while (in.hasNextLine()) {
 String readLine = in.readLine().trim(); // 读取当前行
 System.out.println(readLine);
 
 }
 System.out.println(file.length());
 
 }
 
}
package com.njupt.ymh;
 
import java.io.File;
import java.util.Iterator;
import java.util.List;
 
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
 
public class NewsPaper {
 int doc_id; // 文章id
 String doc_title; // 文章标题
 String lead_paragraph ; // 文章首段
 String full_text; // 文章内容
 String date; // 文章日期
 public NewsPaper(String xml) {
 doc_id = -1; // 文章id
 doc_title = null; // 文章标题
 lead_paragraph = null; // 文章首段
 full_text = null; // 文章内容
 date = null; // 文章日期
 searchValue(xml);
 }
 
 /**
 * 加载Document文件
 * @param fileName
 * @return Document
 */
 private Document load(String fileName) {
 Document document = null; // 文档
 SAXReader saxReader = new SAXReader(); // 读取文件流
 
 try {
 document = saxReader.read(new File(fileName));
 } catch (DocumentException e) {
 e.printStackTrace();
 }
 
 return document;
 }
 
 /**
 * 获取Document的根节点
 * @param args
 */
 private Element getRootNode(Document document) {
 return document.getRootElement();
 }
 
 /**
 * 获取所需节点值
 * @param xml
 */
 private void searchValue(String xml) {
 Document document = load(xml);
  Element root = getRootNode(document); // 根节点 
  
  // 文章日期
  date = xml.substring(10, 20);
  // 文章标题
  doc_title = root.valueOf("//head/title");
  
  // 文章-id
  List<Node> list_doc_id = document.selectNodes("//doc-id/@id-string"); 
  for(Node ele:list_doc_id){
   doc_id = Integer.parseInt(ele.getText());
  }
  
  // 文章内容
  for (Iterator<Element> i = root.elementIterator(); i.hasNext();) { 
   Element el = (Element) i.next(); // head、body
   
   // 对body节点进行操作
   if (el.getName() == "body") { // body
    for (Iterator<Element> body = el.elementIterator(); body.hasNext();) {
  Element elbody = body.next();
  
  if (elbody.getName() == "body.content") { //body.content
  for (Iterator<Element> block = elbody.elementIterator(); block.hasNext();) {
  Element block_class = (Element) block.next();
  
  if (block_class.attributeValue("class").equals("full_text") ) { // full_text
  List<Node> list_text = block_class.selectNodes("p");
  for (Node text : list_text) 
   if (full_text == null) 
   full_text = text.getStringValue();
   else 
   full_text = full_text +" " + text.getStringValue();
  }
  
  else { // lead_paragraph
  List<Node> list_lead = block_class.selectNodes("p");
  for (Node lead : list_lead) 
   if (lead_paragraph == null)
   lead_paragraph = lead.getStringValue();
   else 
   lead_paragraph = lead_paragraph +" "+ lead.getStringValue();
  }
  }
  }
 }
   }
  } 
 }
 
 /**
 * 获取文章标题
 * @param args
 */
 public String getTitle() {
 return doc_title;
 }
 
 /**
 * 获取文章id
 * @param args
 */
 public int getID() {
 return doc_id;
 }
 
 /**
 * 获取文章简介
 * @param args
 */
 public String getLead() {
 if (getID() < 394070 && lead_paragraph != null && lead_paragraph.length() > 6)  //1990-10-22之前
 return lead_paragraph.substring(6);
 else       //1990-10-22之后
 return lead_paragraph;
 }
 
 /**
 * 获取文章正文
 * @param args
 */
 public String getfull() {
 if (getID() < 394070 && full_text != null && full_text.length() > 6)   //1990-10-22之前
 return full_text.substring(6);
 else
 return full_text;
 }
 
 /**
 * 获取文章日期
 * @param args
 */
 public String getDate() {
 return date;
 }
 
 /**
 * 判断获取的信息是否有用
 * @return
 */
 public boolean isUseful() {
 if (getID() == -1)
 return false;
 if (getDate() == null ) 
 return false;
 if (getTitle() == null || getTitle().length() >= 255) 
 return false;
 if (getLead() == null || getLead().length() >= 65535 ) 
 return false;
 if (getfull() == null || getfull().length() >= 65535) 
 return false;
 
 return !isnum();
 }
 
 /**
 * 挑出具有特殊开头的数字内容文章
 * @return
 */
 private boolean isnum() {
 if (getfull() != null && getfull().length() > 24) {
 if (getfull().substring(0, 20).contains("*3*** COMPANY REPORT") ) { // 剔除数字文章 
 return true;
 }
 }
 return false;
 }
 
 
 public static void main(String[] args) {
 List<String> listFile = SearchFile.getAllFile("E:\\huadai\\1989\\10", false); // 文件列表
 //String date; // 日期
 int count = 0;
 int i = 0;
 for (String string : listFile) {
 NewsPaper newsPaper = new NewsPaper(string);
 count++;
 if (!newsPaper.isUseful()) {
 i++;
 System.out.println(newsPaper.getLead());
 } 
 }
 
 System.out.println(i + " "+ count);
 
 }
}

 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

更多精彩内容其他人还在看

Springmvc restful配置遇到的小坑

本文是小编给大家带了的Springmvc restful配置遇到的小小坑,小编给大家带来了问题原因及解决办法,非常不错,具有参考借鉴价值,感兴趣的朋友一起看下吧
收藏 0 赞 0 分享

Java中的匿名内部类小结

java内部类分为: 成员内部类、静态嵌套类、方法内部类、匿名内部类。这篇文章主要介绍了Java中的匿名内部类的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

Java的云打印Lodop

这篇文章主要介绍了Java的云打印Lodop 的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

Java线程池框架核心代码解析

这篇文章主要针对Java线程池框架核心代码进行详细解析,分析Java线程池框架的实现ThreadPoolExecutor,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Java 交换两个变量的数值实现方法

下面小编就为大家带来一篇Java 交换两个变量的数值实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

全面了解JAVA_BaseDAO数据处理类

下面小编就为大家带来一篇全面了解JAVA_BaseDAO数据处理类。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

java、python、JavaScript以及jquery循环语句的区别

本篇文章主要介绍java、python、JavaScript以及jquery的循环语句的区别,这里整理了它们循环语句语法跟示例,以便大家阅读,更好的区分它们的不同
收藏 0 赞 0 分享

基于JDBC封装的BaseDao(实例代码)

下面小编就为大家带来一篇基于JDBC封装的BaseDao(实例代码)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

简单通用JDBC辅助类封装(实例)

下面小编就为大家带来一篇简单通用JDBC辅助类封装(实例)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

浅谈java线程中生产者与消费者的问题

下面小编就为大家带来一篇浅谈java线程中生产者与消费者的问题。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享
查看更多