HTMLParser enregistre les informations analysées sous forme d'arborescence. Le nœud est la base du type de données pour le stockage des informations.
Veuillez consulter la définition de Node :
public interface Node extends Cloneable;
Il existe plusieurs types de méthodes incluses dans Node :
Pour les fonctions qui traversent les structures arborescentes, ces fonctions sont les plus simples à comprendre :
Node getParent ():取得父节点 NodeList getChildren ():取得子节点的列表 Node getFirstChild ():取得第一个子节点 Node getLastChild ():取得最后一个子节点 Node getPreviousSibling ():取得前一个兄弟(不好意思,英文是兄弟姐妹,直译太麻烦而且不符合习惯,对不起女同胞了) Node getNextSibling ():取得下一个兄弟节点
Fonction pour obtenir le contenu du nœud :
String getText ():取得文本 String toPlainTextString():取得纯文本信息。 String toHtml () :取得HTML信息(原始HTML) String toHtml (boolean verbatim):取得HTML信息(原始HTML) String toString ():取得字符串信息(原始HTML) Page getPage ():取得这个Node对应的Page对象 int getStartPosition ():取得这个Node在HTML页面中的起始位置 int getEndPosition ():取得这个Node在HTML页面中的结束位置
Fonction pour le filtre :
void collectInto (NodeList list, NodeFilter filter):基于filter的条件对于这个节点进行过滤,符合条件的节点放到list中。
Fonctions utilisé pour le parcours des visiteurs :
void accept (NodeVisitor visitor):对这个Node应用visitor
Fonction utilisée pour modifier le contenu, ce type est moins utilisé :
void setPage (Page page):设置这个Node对应的Page对象 void setText (String text):设置文本 void setChildren (NodeList children):设置子节点列表
Autres fonctions :
void doSemanticAction ():执行这个Node对应的操作(只有少数Tag有对应的操作) Object clone ():接口Clone的抽象函数。
En fait, nous utilisons le plus HTMLParser pour traiter les pages HTML. Les fonctions liées aux filtres ou aux visiteurs sont nécessaires, et les premier et deuxième types de fonctions sont les plus utilisés. Le premier type de fonction est plus facile à comprendre. Utilisons un exemple pour illustrer le deuxième type de fonction.
Voici le fichier HTML utilisé pour les tests :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <head><meta http-equiv="Content-Type" content="text/html; charset=gb2312"><title>白泽居-www.baizeju.com</title></head> <html xmlns="http://www.w3.org/1999/xhtml"> <body > <div id="top_main"> <div id="logoindex"> <!--这是注释--> 白泽居-www.baizeju.com <a href="http://www.baizeju.com">白泽居-www.baizeju.com</a> </div> 白泽居-www.baizeju.com </div> </body> </html>
Code de test :
/** * @author www.baizeju.com */ package com.baizeju.htmlparsertester; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.FileInputStream; import java.io.File; import java.net.HttpURLConnection; import java.net.URL; import org.htmlparser.Node; import org.htmlparser.util.NodeIterator; import org.htmlparser.Parser; /** * @author www.baizeju.com */ public class Main { private static String ENCODE = "GBK"; private static void message( String szMsg ) { try{ System.out.println(new String(szMsg.getBytes(ENCODE), System.getProperty("file.encoding"))); } catch(Exception e ){} } public static String openFile( String szFileName ) { try { BufferedReader bis = new BufferedReader(new InputStreamReader(new FileInputStream( new File(szFileName)), ENCODE) ); String szContent=""; String szTemp; while ( (szTemp = bis.readLine()) != null) { szContent+=szTemp+"/n"; } bis.close(); return szContent; } catch( Exception e ) { return ""; } } public static void main(String[] args) { try{ Parser parser = new Parser( (HttpURLConnection) (new URL("http://127.0.0.1:8080/HTMLParserTester.html")).openConnection() ); for (NodeIterator i = parser.elements (); i.hasMoreNodes(); ) { Node node = i.nextNode(); message("getText:"+node.getText()); message("getPlainText:"+node.toPlainTextString()); message("toHtml:"+node.toHtml()); message("toHtml(true):"+node.toHtml(true)); message("toHtml(false):"+node.toHtml(false)); message("toString:"+node.toString()); message("================================================="); } } catch( Exception e ) { System.out.println( "Exception:"+e ); } } }
Résultat de sortie :
getText:!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" getPlainText: toHtml:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> toHtml(true):<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> toHtml(false):<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> toString:Doctype Tag : !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd; begins at : 0; ends at : 121 ================================================= getText: getPlainText: toHtml: toHtml(true): toHtml(false): toString:Txt (121[0,121],123[1,0]): /n ================================================= getText:head getPlainText:白泽居-www.baizeju.com toHtml:<head><meta http-equiv="Content-Type" content="text/html; charset=gb2312"><title>白泽居-www.baizeju.com</title></head> toHtml(true):<head><meta http-equiv="Content-Type" content="text/html; charset=gb2312"><title>白泽居-www.baizeju.com</title></head> toHtml(false):<head><meta http-equiv="Content-Type" content="text/html; charset=gb2312"><title>白泽居-www.baizeju.com</title></head> toString:HEAD: Tag (123[1,0],129[1,6]): head Tag (129[1,6],197[1,74]): meta http-equiv="Content-Type" content="text/html; ... Tag (197[1,74],204[1,81]): title Txt (204[1,81],223[1,100]): 白泽居-www.baizeju.com End (223[1,100],231[1,108]): /title End (231[1,108],238[1,115]): /head ================================================= getText: getPlainText: toHtml: toHtml(true): toHtml(false): toString:Txt (238[1,115],240[2,0]): /n ================================================= getText:html xmlns="http://www.w3.org/1999/xhtml" getPlainText: 白泽居-www.baizeju.com 白泽居-www.baizeju.com 白泽居-www.baizeju.com toHtml:<html xmlns="http://www.w3.org/1999/xhtml"> <body > <div id="top_main"> <div id="logoindex"> <!--这是注释--> 白泽居-www.baizeju.com <a href="http://www.baizeju.com">白泽居-www.baizeju.com</a> </div> 白泽居-www.baizeju.com </div> </body> </html> toHtml(true):<html xmlns="http://www.w3.org/1999/xhtml"> <body > <div id="top_main"> <div id="logoindex"> <!--这是注释--> 白泽居-www.baizeju.com <a href="http://www.baizeju.com">白泽居-www.baizeju.com</a> </div> 白泽居-www.baizeju.com </div> </body> </html> toHtml(false):<html xmlns="http://www.w3.org/1999/xhtml"> <body > <div id="top_main"> <div id="logoindex"> <!--这是注释--> 白泽居-www.baizeju.com <a href="http://www.baizeju.com">白泽居-www.baizeju.com</a> </div> 白泽居-www.baizeju.com </div> </body> </html> toString:Tag (240[2,0],283[2,43]): html xmlns="http://www.w3.org/1999/xhtml" Txt (283[2,43],285[3,0]): /n Tag (285[3,0],292[3,7]): body Txt (292[3,7],294[4,0]): /n Tag (294[4,0],313[4,19]): div id="top_main" Txt (313[4,19],316[5,1]): /n/t Tag (316[5,1],336[5,21]): div id="logoindex" Txt (336[5,21],340[6,2]): /n/t/t Rem (340[6,2],351[6,13]): 这是注释 Txt (351[6,13],376[8,0]): /n/t/t白泽居-www.baizeju.com/n Tag (376[8,0],409[8,33]): a href="http://www.baizeju.com" Txt (409[8,33],428[8,52]): 白泽居-www.baizeju.com End (428[8,52],432[8,56]): /a Txt (432[8,56],435[9,1]): /n/t End (435[9,1],441[9,7]): /div Txt (441[9,7],465[11,0]): /n/t白泽居-www.baizeju.com/n End (465[11,0],471[11,6]): /div Txt (471[11,6],473[12,0]): /n End (473[12,0],480[12,7]): /body Txt (480[12,7],482[13,0]): /n End (482[13,0],489[13,7]): /html
============================================= === ===
Pour le contenu du premier Noeud, la ligne correspondante est , c'est plus facile à comprendre.
À partir de ce résultat de sortie, vous pouvez également voir la structure arborescente du contenu. Ou plutôt la structure des bois. Les balises de premier niveau dans le contenu de la page, telles que DOCTYPE, head et html, forment un nœud Node de niveau supérieur (de nombreuses personnes peuvent être un peu étranges quant au contenu des deuxième et quatrième nœuds. En fait, ces deux nœuds sont Deux symboles de nouvelle ligne. HTMLParser convertit tous les sauts de ligne, espaces, tabulations, etc. dans le contenu de la page HTML en balises correspondantes, il existe donc un nœud comme celui-ci, bien qu'il ait moins de contenu, haha)
. getPlainTextString signifie que tout ce que l'utilisateur peut voir est inclus. Il y a deux points intéressants. Le premier est que le contenu du titre dans la balise
Ce qui précède est l'explication détaillée de l'utilisation de HTMLParser (2). Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (m.sbmmt.com) !