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解析,但是程序总调不通,有人能帮助解决一下么?
分享到:
相关推荐
NULL 博文链接:https://lujo20121128.iteye.com/blog/1736765
XML解析四种解析方式 DOM SAX JDOM DOM4J
本代码是我对博客的xml解析----------Sax解析的代码重写了,一份,给需要的朋友,做参考。
【正文】 一、XML和Json数据的引入: 通常情况下,每个需要访问网络的应用程序都会有一个自己的服务器,我们可以向服务器提交数据,也可以从服务器获取数据。
android 学习笔记1--SAX解析XML,了解下如何用sax解析xml吧
SAX解析XML文件的实例。一个项目同时用dom解析和sax解析xml文件貌似会报错,项目框架建一直是用sax和dom4j解析xml文件的。当我用dom解析xml文件。导入包后就报错识别不了xml文件的编码格式。于是做了一个sax解析xml...
用于XML和HTML的 sax样式解析器的维护分支。 设计时考虑了,但在浏览器或其他CommonJS实现中应该可以正常工作。 这是什么 一个非常简单的工具来解析XML字符串。 流HTML解析器的垫脚石。 一种方便的方式来处理RSS...
超全面javaweb教程第6天-_04_sax的解析的过程
离线安装包,亲测可用
java学习笔记——使用DOM解析XML和使用SAX解析XML
dom和sax解析的区别,dom的概念,sax的概念
一个实现SAX的解析器(也就是“SAX Parser”)以一个串流解析器的型式作用,拥有事件驱动API。由使用者定义回调函数,解析时,若发生事件的话会被调用。SAX事件包括: XML 文字 节点 XML 元素 节点 XML 虚理指令 ...
使用sax解析从网络上获取的xml文件
java中dom解析和sax解析xml文件对比示例!
sax-vsm sax-vsm sax-vsm sax-vsm sax-vsm sax-vsm sax-vsm sax-vsm
SAX解析超大XML文件 示例代码 SAX解析超大XML文件 示例代码 SAX解析超大XML文件 示例代码
APIRapidjson 是一个 C++ 的快速 JSON 解析器和生成器,使用 SAX/DOM 风格的 API 设计
压缩包里面有两个文件:SAX.java和SAXparse.java 用来解析大于100M的xml文件,SAX读取xml不同于DOM方式,DOM方式在解析xml前需要全部加载xml文件,当xml文件很大时,就会出现内存不足的问题,而SAX则是逐行读取xml...
Sax解析XML文件解