欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

解析得到除去标签的txt内容

程序员文章站 2023-12-09 14:18:15
复制代码 代码如下:nodelist body_nodes=this.getparser().parse(body_filter); for(int i=0;i
复制代码 代码如下:

nodelist body_nodes=this.getparser().parse(body_filter);
for(int i=0;i<body_nodes.size();i++)
{
node node=body_nodes.elementat(i);

parser body_parser=new parser(node.tohtml());
textextractingvisitor visitor=new textextractingvisitor();
body_parser.visitallnodeswith(visitor);
body.append(visitor.getextractedtext());
}

textextractingvisitor,visitallnodeswith等类及方法都是visitor中比较很重要但也很少见的。
下面附源代码:
复制代码 代码如下:

import java.io.bufferedwriter;
import java.io.file;
import java.io.filewriter;
import java.io.ioexception;
import java.util.date;

import org.htmlparser.node;
import org.htmlparser.nodefilter;
import org.htmlparser.parser;
import org.htmlparser.filters.andfilter;
import org.htmlparser.filters.hasattributefilter;
import org.htmlparser.filters.haschildfilter;
import org.htmlparser.filters.tagnamefilter;
import org.htmlparser.util.nodelist;
import org.htmlparser.visitors.textextractingvisitor;

import com.extractor.extractor;

public class extractorhangdian extends extractor{
public void extract()
{
bufferedwriter bw=null;
string indextime;
string title;
stringbuffer body=new stringbuffer();;
nodefilter time_filter=new andfilter(new tagnamefilter("font"),new hasattributefilter("color","#808080"));
nodefilter title_filter1=new andfilter(new tagnamefilter("td"),new haschildfilter(new tagnamefilter("b")));
nodefilter body_filter=new andfilter(new tagnamefilter("td"),new haschildfilter(new tagnamefilter("p")));

try
{
nodelist title_nodes=this.getparser().parse(title_filter1);
node node=title_nodes.elementat(0);
nodelist node2=node.getchildren();
//title=node2.elementat(0).tohtml(); /* '\r\n' */
//title=node2.elementat(1).tohtml(); /*font color="#000080" style="font-size:14.4px*/
//title=node2.elementat(2).tohtml(); /* b */
title=node2.elementat(3).tohtml(); /* 教材征订及教师用书登记通知 */


bw=new bufferedwriter(new filewriter(new file(this.getoutputpath()+title+".txt")));

string url_seg1=getinputfilepath().substring(3,30);
int end=getinputfilepath().lastindexof(".");
string url_seg2=getinputfilepath().substring(30, end);
string url_seg=url_seg1+".asp?"+url_seg2;
url_seg=url_seg.replaceall("\\\\","/");
string url="http://"+url_seg;

bw.write(url+newline);
bw.write(title+newline);


}
catch(exception e)
{
e.printstacktrace();
}

this.getparser().reset();
try
{
nodelist time_nodes=this.getparser().parse(time_filter);
node time_node=time_nodes.elementat(1);//这里的“1”表示符合time_filter的第二个元素
indextime=time_node.getnextsibling().tohtml();

bw.write(indextime+newline);
}
catch(exception e)
{
e.printstacktrace();
}

this.getparser().reset();//得到除去标签的所有txt文本
try
{
nodelist body_nodes=this.getparser().parse(body_filter);
for(int i=0;i<body_nodes.size();i++)
{
node node=body_nodes.elementat(i);

parser body_parser=new parser(node.tohtml());
textextractingvisitor visitor=new textextractingvisitor();
body_parser.visitallnodeswith(visitor);
body.append(visitor.getextractedtext());
}
bw.write(body+newline);

}
catch(exception e)
{
e.printstacktrace();
}

try
{
if(bw!=null)
bw.close();
}catch(ioexception e)
{
e.printstacktrace();
}
}
}

这里顺便提一下,当年bw没有关掉,怎么读不进去,搞了我好几天,郁闷死了,想起来就火大,注意!!