HTMLParser使用详解Word文件下载.docx
- 文档编号:17624493
- 上传时间:2022-12-07
- 格式:DOCX
- 页数:27
- 大小:57.65KB
HTMLParser使用详解Word文件下载.docx
《HTMLParser使用详解Word文件下载.docx》由会员分享,可在线阅读,更多相关《HTMLParser使用详解Word文件下载.docx(27页珍藏版)》请在冰豆网上搜索。
packagecom.baizeju.htmlparsertester;
importjava.io.BufferedReader;
importjava.io.InputStreamReader;
importjava.io.FileInputStream;
importjava.io.File;
import.HttpURLConnection;
import.URL;
importorg.htmlparser.visitors.TextExtractingVisitor;
importorg.htmlparser.Parser;
/**
*@author
*/
publicclassMain{
privatestaticStringENCODE="
GBK"
;
privatestaticvoidmessage(StringszMsg){
try{System.out.println(newString(szMsg.getBytes(ENCODE),System.getProperty("
file.encoding"
)));
}catch(Exceptione){}
}
publicstaticStringopenFile(StringszFileName){
try{
BufferedReaderbis=newBufferedReader(newInputStreamReader(newFileInputStream(newFile(szFileName)),ENCODE));
StringszContent="
"
StringszTemp;
while((szTemp=bis.readLine())!
=null){
szContent+=szTemp+"
\n"
bis.close();
returnszContent;
catch(Exceptione){
return"
publicstaticvoidmain(String[]args){
StringszContent=openFile("
E:
/MySites/HTMLParserTester.html"
);
try{
//Parserparser=Parser.createParser(szContent,ENCODE);
//Parserparser=newParser(szContent);
Parserparser=newParser((HttpURLConnection)(newURL("
http:
//127.0.0.1:
8080/HTMLParserTester.html"
)).openConnection());
TextExtractingVisitorvisitor=newTextExtractingVisitor();
parser.visitAllNodesWith(visitor);
StringtextInPage=visitor.getExtractedText();
message(textInPage);
catch(Exceptione){
}
加重的部分测试了几种不同的初始化方法,后面的显示了结果。
大家看到能Parser出内容就可以了,如何操作访问Parser的内容我们在后面讨论。
HTMLParser将解析过的信息保存为一个树的结构。
Node是信息保存的数据类型基础。
请看Node的定义:
publicinterfaceNodeextendsCloneable;
Node中包含的方法有几类:
对于树型结构进行遍历的函数,这些函数最容易理解:
NodegetParent():
取得父节点
NodeListgetChildren():
取得子节点的列表
NodegetFirstChild():
取得第一个子节点
NodegetLastChild():
取得最后一个子节点
NodegetPreviousSibling():
取得前一个兄弟(不好意思,英文是兄弟姐妹,直译太麻烦而且不符合习惯,对不起女同胞了)
NodegetNextSibling():
取得下一个兄弟节点
取得Node内容的函数:
StringgetText():
取得文本
StringtoPlainTextString():
取得纯文本信息。
StringtoHtml():
取得HTML信息(原始HTML)
StringtoHtml(booleanverbatim):
StringtoString():
取得字符串信息(原始HTML)
PagegetPage():
取得这个Node对应的Page对象
intgetStartPosition():
取得这个Node在HTML页面中的起始位置
intgetEndPosition():
取得这个Node在HTML页面中的结束位置
用于Filter过滤的函数:
voidcollectInto(NodeListlist,NodeFilterfilter):
基于filter的条件对于这个节点进行过滤,符合条件的节点放到list中。
用于Visitor遍历的函数:
voidaccept(NodeVisitorvisitor):
对这个Node应用visitor
用于修改内容的函数,这类用得比较少:
voidsetPage(Pagepage):
设置这个Node对应的Page对象
voidsetText(Stringtext):
设置文本
voidsetChildren(NodeListchildren):
设置子节点列表
其他函数:
voiddoSemanticAction():
执行这个Node对应的操作(只有少数Tag有对应的操作)
Objectclone():
接口Clone的抽象函数。
实际我们用HTMLParser最多的是处理HTML页面,Filter或Visitor相关的函数是必须的,然后第一类和第二类函数是用得最多的。
第一类函数比较容易理解,下面用例子说明一下第二类函数。
下面是用于测试的HTML文件:
<
!
DOCTYPEhtmlPUBLIC"
-//W3C//DTDXHTML1.0Transitional//EN"
"
//www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
>
head>
metahttp-equiv="
Content-Type"
content="
text/html;
charset=gb2312"
title>
白泽居-<
/title>
/head>
htmlxmlns="
//www.w3.org/1999/xhtml"
body>
divid="
top_main"
<
logoindex"
--这是注释-->
白泽居-
ahref="
/a>
/div>
/body>
/html>
测试代码:
importorg.htmlparser.Node;
importorg.htmlparser.util.NodeIterator;
try{System.out.println(newString(szMsg.getBytes(ENCODE),System.getProperty("
}catch(Exceptione){}
BufferedReaderbis=newBufferedReader(newInputStreamReader(newFileInputStream(newFile(szFileName)),ENCODE));
Parserparser=newParser((HttpURLConnection)(newURL("
for(NodeIteratori=parser.elements();
i.hasMoreNodes();
){
Nodenode=i.nextNode();
message("
getText:
+node.getText());
getPlainText:
+node.toPlainTextString());
toHtml:
+node.toHtml());
toHtml(true):
+node.toHtml(true));
toHtml(false):
+node.toHtml(false));
toString:
+node.toString());
================================================="
}
System.out.println("
Exception:
+e);
输出结果:
DoctypeTag:
!
//www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd;
beginsat:
0;
endsat:
121
=================================================
Txt(121[0,121],123[1,0]):
\n
head
白泽居-
HEAD:
Tag(123[1,0],129[1,6]):
head
Tag(129[1,6],197[1,74]):
metahttp-equiv="
...
Tag(197[1,74],204[1,81]):
title
Txt(204[1,81],223[1,100]):
End(223[1,100],231[1,108]):
/title
End(231[1,108],238[1,115]):
/head
Txt(238[1,115],240[2,0]):
Tag(240[2,0],283[2,43]):
htmlxmlns="
Txt(283[2,43],285[3,0]):
T
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- HTMLParser 使用 详解
![提示](https://static.bdocx.com/images/bang_tan.gif)