1. import java.net.URL;   
  2. import org.apache.log4j.Logger;   
  3. import org.htmlparser.Node;   
  4. import org.htmlparser.NodeFilter;   
  5. import org.htmlparser.Parser;   
  6. import org.htmlparser.Tag;   
  7. import org.htmlparser.beans.LinkBean;   
  8. import org.htmlparser.filters.NodeClassFilter;   
  9. import org.htmlparser.filters.OrFilter;   
  10. import org.htmlparser.filters.TagNameFilter;   
  11. import org.htmlparser.tags.HeadTag;   
  12. import org.htmlparser.tags.ImageTag;   
  13. import org.htmlparser.tags.InputTag;   
  14. import org.htmlparser.tags.LinkTag;   
  15. import org.htmlparser.tags.OptionTag;   
  16. import org.htmlparser.tags.SelectTag;   
  17. import org.htmlparser.tags.TableColumn;   
  18. import org.htmlparser.tags.TableRow;   
  19. import org.htmlparser.tags.TableTag;   
  20. import org.htmlparser.tags.TitleTag;   
  21. import org.htmlparser.util.NodeIterator;   
  22. import org.htmlparser.util.NodeList;   
  23. import org.htmlparser.util.ParserException;   
  24. import org.htmlparser.visitors.HtmlPage;   
  25. import org.htmlparser.visitors.NodeVisitor;   
  26. import org.htmlparser.visitors.ObjectFindingVisitor;   
  27.    
  28. public class T  {   
  29.    
  30.   private static final Logger logger = Logger.getLogger(T.class);   
  31.    
  32.    
  33.  
  34.   /*  
  35.    * 测试ObjectFindVisitor的用法  
  36.    */   
  37.   public void testImageVisitor() {   
  38.     try {   
  39.       ImageTag imgLink;   
  40.       ObjectFindingVisitor visitor = new ObjectFindingVisitor(ImageTag.class);   
  41.       Parser parser = new Parser();   
  42.       parser.setURL("http://www.google.com");   
  43.       parser.setEncoding(parser.getEncoding());   
  44.       parser.visitAllNodesWith(visitor);   
  45.       Node[] nodes = visitor.getTags();   
  46.       for (int i = 0; i < nodes.length; i++) {   
  47.         imgLink = (ImageTag) nodes[i];   
  48.         logger.fatal("testImageVisitor() ImageURL = " + imgLink.getImageURL());   
  49.         logger.fatal("testImageVisitor() ImageLocation = " + imgLink.extractImageLocn());   
  50.         logger.fatal("testImageVisitor() SRC = " + imgLink.getAttribute("SRC"));   
  51.       }   
  52.     } catch (Exception e) {   
  53.       e.printStackTrace();   
  54.     }   
  55.   }   
  56.    
  57.   /*  
  58.    * 测试TagNameFilter用法  
  59.    */   
  60.   public void testNodeFilter() {   
  61.     try {   
  62.       NodeFilter filter = new TagNameFilter("IMG");   
  63.       Parser parser = new Parser();   
  64.       parser.setURL("http://www.google.com");   
  65.       parser.setEncoding(parser.getEncoding());   
  66.       NodeList list = parser.extractAllNodesThatMatch(filter);   
  67.       for (int i = 0; i < list.size(); i++) {   
  68.         logger.fatal("testNodeFilter() " + list.elementAt(i).toHtml());   
  69.       }   
  70.     } catch (Exception e) {   
  71.       e.printStackTrace();   
  72.     }   
  73.    
  74.   }   
  75.    
  76.   /*  
  77.    * 测试NodeClassFilter用法  
  78.    */   
  79.   public void testLinkTag() {   
  80.     try {   
  81.    
  82.       NodeFilter filter = new NodeClassFilter(LinkTag.class);   
  83.       Parser parser = new Parser();   
  84.       parser.setURL("http://www.google.com");   
  85.       parser.setEncoding(parser.getEncoding());   
  86.       NodeList list = parser.extractAllNodesThatMatch(filter);   
  87.       for (int i = 0; i < list.size(); i++) {   
  88.         LinkTag node = (LinkTag) list.elementAt(i);   
  89.         logger.fatal("testLinkTag() Link is :" + node.extractLink());   
  90.       }   
  91.     } catch (Exception e) {   
  92.       e.printStackTrace();   
  93.     }   
  94.    
  95.   }   
  96.    
  97.   /*  
  98.    * 测试<link href=" text=’text/css’ rel=’stylesheet’ />用法  
  99.    */   
  100.   public void testLinkCSS() {   
  101.     try {   
  102.    
  103.       Parser parser = new Parser();   
  104.       parser.setInputHTML("<head><title>Link Test</title>"   
  105.           + "<link href=’/test01/css.css' text='text/css' rel='stylesheet' />"   
  106.           + "<link href='/test02/css.css' text='text/css' rel='stylesheet' />" + "</head>"   
  107.           + "<body>");   
  108.       parser.setEncoding(parser.getEncoding());   
  109.    
  110.       for (NodeIterator e = parser.elements(); e.hasMoreNodes();) {   
  111.         Node node = e.nextNode();   
  112.         logger.fatal("testLinkCSS()" + node.getText() + node.getClass());   
  113.    
  114.       }   
  115.     } catch (Exception e) {   
  116.       e.printStackTrace();   
  117.     }   
  118.   }   
  119.    
  120.   /*  
  121.    * 测试OrFilter的用法  
  122.    */   
  123.   public void testOrFilter() {   
  124.     NodeFilter inputFilter = new NodeClassFilter(InputTag.class);   
  125.     NodeFilter selectFilter = new NodeClassFilter(SelectTag.class);   
  126.    
  127.     NodeList nodeList = null;   
  128.    
  129.     try {   
  130.       Parser parser = new Parser();   
  131.       parser   
  132.           .setInputHTML("<head><title>OrFilter Test</title>"   
  133.               + "<link href='/test01/css.css' text='text/css' rel='stylesheet' />"   
  134.               + "<link href='/test02/css.css' text='text/css' rel='stylesheet' />"   
  135.               + "</head>"   
  136.               + "<body>"   
  137.               + "<input type='text' value='text1′ name='text1′/>"   
  138.               + "<input type='text' value='text2′ name='text2′/>"   
  139.               + "<select><option id='1′>1</option><option id='2′>2</option><option id='3′></option></select>"   
  140.               + "<a href='http://www.yeeach.com'>yeeach.com</a>" + "</body>");   
  141.    
  142.       parser.setEncoding(parser.getEncoding());   
  143.       OrFilter lastFilter = new OrFilter();   
  144.       lastFilter.setPredicates(new NodeFilter[] { selectFilter, inputFilter });   
  145.       nodeList = parser.parse(lastFilter);   
  146.       for (int i = 0; i <= nodeList.size(); i++) {   
  147.         if (nodeList.elementAt(i) instanceof InputTag) {   
  148.           InputTag tag = (InputTag) nodeList.elementAt(i);   
  149.           logger.fatal("OrFilter tag name is :" + tag.getTagName() + " ,tag value is:"   
  150.               + tag.getAttribute("value"));   
  151.         }   
  152.         if (nodeList.elementAt(i) instanceof SelectTag) {   
  153.           SelectTag tag = (SelectTag) nodeList.elementAt(i);   
  154.           NodeList list = tag.getChildren();   
  155.    
  156.           for (int j = 0; j < list.size(); j++) {   
  157.             OptionTag option = (OptionTag) list.elementAt(j);   
  158.             logger.fatal("OrFilter Option" + option.getOptionText());   
  159.           }   
  160.    
  161.         }   
  162.       }   
  163.    
  164.     } catch (ParserException e) {   
  165.       e.printStackTrace();   
  166.     }   
  167.   }   
  168.    
  169.   /*  
  170.    * 测试对<table><tr><td></td></tr></table>的解析  
  171.    */   
  172.   public void testTable() {   
  173.     Parser myParser;   
  174.     NodeList nodeList = null;   
  175.     myParser = Parser.createParser("<body> " + "<table id='table1′ >"   
  176.         + "<tr><td>1-11</td><td>1-12</td><td>1-13</td>"   
  177.         + "<tr><td>1-21</td><td>1-22</td><td>1-23</td>"   
  178.         + "<tr><td>1-31</td><td>1-32</td><td>1-33</td></table>" + "<table id='table2′ >"   
  179.         + "<tr><td>2-11</td><td>2-12</td><td>2-13</td>"   
  180.         + "<tr><td>2-21</td><td>2-22</td><td>2-23</td>"   
  181.         + "<tr><td>2-31</td><td>2-32</td><td>2-33</td></table>" + "</body>""GBK");   
  182.     NodeFilter tableFilter = new NodeClassFilter(TableTag.class);   
  183.     OrFilter lastFilter = new OrFilter();   
  184.     lastFilter.setPredicates(new NodeFilter[] { tableFilter });   
  185.     try {   
  186.       nodeList = myParser.parse(lastFilter);   
  187.       for (int i = 0; i <= nodeList.size(); i++) {   
  188.         if (nodeList.elementAt(i) instanceof TableTag) {   
  189.           TableTag tag = (TableTag) nodeList.elementAt(i);   
  190.           TableRow[] rows = tag.getRows();   
  191.    
  192.           for (int j = 0; j < rows.length; j++) {   
  193.             TableRow tr = (TableRow) rows[j];   
  194.             TableColumn[] td = tr.getColumns();   
  195.             for (int k = 0; k < td.length; k++) {   
  196.               logger.fatal("<td>" + td[k].toPlainTextString());   
  197.             }   
  198.    
  199.           }   
  200.    
  201.         }   
  202.       }   
  203.    
  204.     } catch (ParserException e) {   
  205.       e.printStackTrace();   
  206.     }   
  207.   }   
  208.    
  209.   /*  
  210.    * 测试NodeVisitor的用法,遍历所有节点  
  211.    */   
  212.   public void testVisitorAll() {   
  213.     try {   
  214.       Parser parser = new Parser();   
  215.       parser.setURL("http://www.google.com");   
  216.       parser.setEncoding(parser.getEncoding());   
  217.       NodeVisitor visitor = new NodeVisitor() {   
  218.         public void visitTag(Tag tag) {   
  219.           logger.fatal("testVisitorAll()  Tag name is :" + tag.getTagName() + " \n Class is :"   
  220.               + tag.getClass());   
  221.         }   
  222.    
  223.       };   
  224.    
  225.       parser.visitAllNodesWith(visitor);   
  226.     } catch (ParserException e) {   
  227.       e.printStackTrace();   
  228.     }   
  229.   }   
  230.    
  231.   /*  
  232.    * 测试对指定Tag的NodeVisitor的用法  
  233.    */   
  234.   public void testTagVisitor() {   
  235.     try {   
  236.    
  237.       Parser parser = new Parser("<head><title>dddd</title>"   
  238.           + "<link href='/test01/css.css' text='text/css' rel='stylesheet' />"   
  239.           + "<link href='/test02/css.css' text='text/css' rel='stylesheet' />" + "</head>"   
  240.           + "<body>" + "<a href='http://www.yeeach.com'>yeeach.com</a>" + "</body>");   
  241.       NodeVisitor visitor = new NodeVisitor() {   
  242.         public void visitTag(Tag tag) {   
  243.           if (tag instanceof HeadTag) {   
  244.             logger.fatal("visitTag() HeadTag : Tag name is :" + tag.getTagName()   
  245.                 + " \n Class is :" + tag.getClass() + "\n Text is :" + tag.getText());   
  246.           } else if (tag instanceof TitleTag) {   
  247.             logger.fatal("visitTag() TitleTag : Tag name is :" + tag.getTagName()   
  248.                 + " \n Class is :" + tag.getClass() + "\n Text is :" + tag.getText());   
  249.    
  250.           } else if (tag instanceof LinkTag) {   
  251.             logger.fatal("visitTag() LinkTag : Tag name is :" + tag.getTagName()   
  252.                 + " \n Class is :" + tag.getClass() + "\n Text is :" + tag.getText()   
  253.                 + " \n getAttribute is :" + tag.getAttribute("href"));   
  254.           } else {   
  255.             logger.fatal("visitTag() : Tag name is :" + tag.getTagName() + " \n Class is :"   
  256.                 + tag.getClass() + "\n Text is :" + tag.getText());   
  257.           }   
  258.    
  259.         }   
  260.    
  261.       };   
  262.    
  263.       parser.visitAllNodesWith(visitor);   
  264.     } catch (Exception e) {   
  265.       e.printStackTrace();   
  266.     }   
  267.   }   
  268.    
  269.   /*  
  270.    * 测试HtmlPage的用法  
  271.    */   
  272.   public void testHtmlPage() {   
  273.     String inputHTML = "<html>" + "<head>"   
  274.         + "<title>Welcome to the HTMLParser website</title>" + "</head>" + "<body>"   
  275.         + "Welcome to HTMLParser" + "<table id='table1′ >"   
  276.         + "<tr><td>1-11</td><td>1-12</td><td>1-13</td>"   
  277.         + "<tr><td>1-21</td><td>1-22</td><td>1-23</td>"   
  278.         + "<tr><td>1-31</td><td>1-32</td><td>1-33</td></table>" + "<table id='table2′ >"   
  279.         + "<tr><td>2-11</td><td>2-12</td><td>2-13</td>"   
  280.         + "<tr><td>2-21</td><td>2-22</td><td>2-23</td>"   
  281.         + "<tr><td>2-31</td><td>2-32</td><td>2-33</td></table>" + "</body>" + "</html>";   
  282.     Parser parser = new Parser();   
  283.     try {   
  284.       parser.setInputHTML(inputHTML);   
  285.       parser.setEncoding(parser.getURL());   
  286.       HtmlPage page = new HtmlPage(parser);   
  287.       parser.visitAllNodesWith(page);   
  288.       logger.fatal("testHtmlPage -title is :" + page.getTitle());   
  289.       NodeList list = page.getBody();   
  290.    
  291.       for (NodeIterator iterator = list.elements(); iterator.hasMoreNodes();) {   
  292.         Node node = iterator.nextNode();   
  293.         logger.fatal("testHtmlPage -node  is :" + node.toHtml());   
  294.       }   
  295.    
  296.     } catch (ParserException e) {   
  297.       // TODO Auto-generated catch block   
  298.       e.printStackTrace();   
  299.     }   
  300.   }   
  301.    
  302.   /*  
  303.    * 测试LinkBean的用法  
  304.    */   
  305.   public void testLinkBean() {   
  306.     Parser parser = new Parser();   
  307.    
  308.     LinkBean linkBean = new LinkBean();   
  309.     linkBean.setURL("http://www.google.com");   
  310.     URL[] urls = linkBean.getLinks();   
  311.    
  312.     for (int i = 0; i < urls.length; i++) {   
  313.       URL url = urls[i];   
  314.       logger.fatal("testLinkBean() -url  is :" + url);   
  315.     }   
  316.    
  317.   }   
  318.    
  319. }