`
tiantian911
  • 浏览: 227048 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Html解析生成纯文本-使用SAX以及htmlcleaner

阅读更多
package testlucene;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringReader;
import java.io.UnsupportedEncodingException;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.Logger;
import org.htmlcleaner.HtmlCleaner;
import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;

public class SAXxhtml extends DefaultHandler {
	/**
	 * Logger for this class
	 */
	private static final Logger logger = Logger.getLogger(SAXxhtml.class);

	public StringBuffer sb = new StringBuffer();
	public boolean usable = true;
	private String sPath = "";

	public SAXxhtml() {
		super();
		// TODO Auto-generated constructor stub
		// PropertyConfigurator.configure("log4j.properties");
		BasicConfigurator.configure();
	}

	public void startElement(String namespaceURI, String localName,
			String rawName, Attributes atts) throws SAXException {
		if (rawName.equals("style") || rawName.equals("script")) {
			usable = false;
		}

	}

	// 解析完成后的统计工作
	public void endDocument() throws SAXException {
		try {
			PrintWriter pw = new PrintWriter(new FileOutputStream(sPath));
			pw.print(sb.toString());
			pw.flush();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	public void characters(char[] ch, int start, int length) {
		String charEncontered = new String(ch, start, length);
		/*
		 * if (!charEncontered.startsWith("<!")||!charEncontered.startsWith("<
		 * ")) { sb.append("\n"); sb.append(charEncontered); }
		 */
		if (usable) {
			sb.append(charEncontered);
			sb.append("\n");
		}

		usable = true;

	}

	
	
	/**
	 * @param args
	 */

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		/*
		 * SAXParserFactory spf = SAXParserFactory.newInstance(); XMLReader
		 * xmlReader = null; SAXParser saxParser = null; try { //
		 * 创建一个解析器SAXParser对象 saxParser = spf.newSAXParser(); //
		 * 得到SAXParser中封装的SAX XMLReader xmlReader = saxParser.getXMLReader();
		 * saxParser.parse(new File("d:/sina.xml"), new SAXxhtml()); } catch
		 * (Exception ex) { logger.error("main(String[]) - " + ex, ex);
		 * System.exit(1); }
		 */

	}

	@Override
	public void endElement(String arg0, String arg1, String arg2)
			throws SAXException {
		// TODO Auto-generated method stub
		super.endElement(arg0, arg1, arg2);

	}

	public void parse(String sPath, String Scontent) {
		this.sPath = sPath;
		try {
			// System.out.println(Scontent);
			HtmlCleaner hc = new HtmlCleaner(Scontent);
			hc.clean();
			PrintWriter pw = new PrintWriter(new FileOutputStream("e:/tmpfile/tmp.txt"));
			pw.print(sb.toString());
			pw.flush();
			pw.close();
			FileInputStream fis = new FileInputStream(new File("e:/tmpfile/tmp.txt"));
			String mid = hc.getBrowserCompactXmlAsString();
			StringReader sr = new StringReader(mid);
			InputSource iSrc = new InputSource(sr);
			System.out.println(iSrc.toString());
			SAXParserFactory spf = SAXParserFactory.newInstance();
			XMLReader xmlReader = null;
			SAXParser saxParser = null;
			// 创建一个解析器SAXParser对象
			saxParser = spf.newSAXParser();
			// 得到SAXParser中封装的SAX XMLReader
			xmlReader = saxParser.getXMLReader();
			saxParser.parse(fis, new SAXxhtml());

		} catch (UnsupportedEncodingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ParserConfigurationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SAXException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}


	}
}

 

 

具体思路是Html->xml,然后就可以用sax对xml解析,但是程序总调不通,有人能帮助解决一下么?

分享到:
评论

相关推荐

    java解析xml数据---sax解析器

    Java解析XML数据主要涉及到的是对XML文档的读取和处理,SAX(Simple API for XML)解析器是一种基于事件驱动的解析方式,适用于处理大型XML文件。与DOM(Document Object Model)解析器不同,SAX不需要一次性加载...

    XML四种解析方式------DOM SAX JDOM DOM4J

    在处理XML文档时,有多种解析方式,包括DOM、SAX、JDOM和DOM4J。每种解析方式都有其特性和适用场景,下面将详细探讨这四种解析方法。 1. DOM(Document Object Model) DOM解析器将整个XML文档加载到内存中,形成一...

    Android网络之数据解析----SAX方式解析XML数据

    本篇文章将深入探讨如何使用SAX(Simple API for XML)方式解析XML数据,这是Android网络通信中处理XML数据的一种高效方法。 一、XML与JSON数据 XML(eXtensible Markup Language)是一种用于标记数据的语言,它...

    android----xml Sax解析示例

    1. **创建解析器**:使用`SAXParserFactory`的`newInstance()`方法创建一个解析器工厂对象,然后通过`newSAXParser()`方法生成SAX解析器。 2. **注册事件处理器**:解析器需要一个实现了`DefaultHandler`接口的对象...

    android使用SAX解析xml

    - 项目中可能包括网络请求模块、SAX解析器处理类以及展示解析结果的UI部分。 通过以上步骤,开发者可以在Android应用中有效地利用SAX解析器处理网络获取的XML数据,提高应用性能并降低内存消耗。理解SAX的工作原理...

    android学习笔记1--SAX解析XML

    在使用SAX进行XML解析的过程中,主要涉及到以下几种方法: 1. **`startDocument()`**:当解析器开始解析XML文档时调用该方法。 2. **`endDocument()`**:当解析器完成整个文档的解析时调用该方法。 3. **`...

    dom解析和sax解析

    DOM(Document Object Model)解析和SAX(Simple API for XML)解析是两种常见的XML文档解析方式,它们在处理XML数据时有不同的策略和优缺点。 DOM解析是一种基于树型结构的XML解析方法。当一个XML文档被DOM解析器...

    sax:用于XML和HTML的sax-js sax样式解析器的维护分支

    用于XML和HTML的 sax样式解析器的维护分支。 设计时考虑了,但在浏览器或其他CommonJS实现中应该可以正常工作。 这是什么 一个非常简单的工具来解析XML字符串。 流HTML解析器的垫脚石。 一种方便的方式来处理RSS...

    SAX解析XML文件实例

    SAX解析XML文件的实例。一个项目同时用dom解析和sax解析xml文件貌似会报错,项目框架建一直是用sax和dom4j解析xml文件的。当我用dom解析xml文件。导入包后就报错识别不了xml文件的编码格式。于是做了一个sax解析xml...

    xml文件解析SAX

    - SAX解析器逐行读取XML文件,当遇到文档的开始、元素开始、元素结束、文本内容、注释等事件时,会调用预先注册的处理器接口(如`ContentHandler`)中的方法。 - 解析器并不关心这些事件的具体处理,只负责触发...

    Sax解析XML文件解析

    1. **创建解析器**:通常使用Java的`SAXParserFactory`类来创建解析器对象。 2. **设置事件处理器**:通过`SAXParser`的`setHandler`方法设置一个实现了`ContentHandler`接口的对象,这个对象将处理SAX解析过程中...

    XML解析和生成工具

    本文将深入探讨XML解析和生成工具的相关知识,以及如何利用提供的`Markup.cpp`和`Markup.h`文件进行操作。 XML的结构: XML文档由一系列元素构成,每个元素都有一个开始标签和结束标签,如 `&lt;tag&gt;` 和 `&lt;/tag&gt;`。...

    超全面javaweb教程第6天- 04 sax的解析的过程

    超全面javaweb教程第6天-_04_sax的解析的过程

    perl-XML-SAX-0.99-9.el7.noarch.rpm

    离线安装包,亲测可用

    数据sax解析

    本文将深入探讨SAX解析的基本原理、工作流程以及如何在实际编程中运用。 ### SAX解析基本概念 SAX解析器逐行读取XML文件,遇到元素、属性、文本等结构时,会触发相应的事件,调用预先定义好的回调方法。这种方法...

    dom-sax解析XML文件-java

    SAX解析器采用事件驱动的方式,逐行读取XML文件,当遇到元素开始、结束、属性、文本等事件时,会触发相应的回调函数。这种方式内存占用低,适合处理大文件,但操作XML数据不如DOM直观,需要编写事件处理器来处理这些...

    Htmlcxx解析之---parserSax.pptx

    HTMLCxx是一个用于解析HTML文档的C++库,它提供了两种解析方式:SAX(Simple API for XML)和DOM(Document Object Model)。这两种方法在处理HTML文档时有不同的策略和优势。 1. **SAX解析器(parserSax)**: - ...

    sax生成并解析大文件的xml

    在Java中,使用SAX生成XML文件并不常见,因为SAX通常用于解析,而不是创建。然而,通过自定义`ContentHandler`,我们可以控制XML元素的生成过程。`ContentHandler`是一个接口,包含如`startElement`、`endElement`...

    webservice远程调用,返回数据生成xml文件,并通过SAX解析出来

    webservice远程调用,返回String数据并生成xml文件到本地工程,在通过SAX解析器把数据解析出来。这是webservice应用的一个简单的例子。根据该例子的思想,可以实现很多功能了。例如把client工程的sayHello方法改为...

Global site tag (gtag.js) - Google Analytics