/* 
Definitive Guide to Swing for Java 2, Second Edition 
By John Zukowski      
ISBN: 1-893115-78-X 
Publisher: APress 
*/ 
 
import java.io.BufferedReader; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.net.URL; 
import java.net.URLConnection; 
 
import javax.swing.text.AttributeSet; 
import javax.swing.text.Element; 
import javax.swing.text.ElementIterator; 
import javax.swing.text.StyleConstants; 
import javax.swing.text.html.HTML; 
import javax.swing.text.html.HTMLDocument; 
import javax.swing.text.html.HTMLEditorKit; 
import javax.swing.text.html.parser.ParserDelegator; 
 
public class ElementIteratorExample { 
 
  public static void main(String args[]) throws Exception { 
 
    if (args.length != 1) { 
      System.err.println("Usage: java ElementIteratorExample input-URL"); 
    } 
 
    // Load HTML file synchronously 
    URL url = new URL(args[0]); 
    URLConnection connection = url.openConnection(); 
    InputStream is = connection.getInputStream(); 
    InputStreamReader isr = new InputStreamReader(is); 
    BufferedReader br = new BufferedReader(isr); 
 
    HTMLEditorKit htmlKit = new HTMLEditorKit(); 
    HTMLDocument htmlDoc = (HTMLDocument) htmlKit.createDefaultDocument(); 
    HTMLEditorKit.Parser parser = new ParserDelegator(); 
    HTMLEditorKit.ParserCallback callback = htmlDoc.getReader(0); 
    parser.parse(br, callback, true); 
 
    // Parse 
    ElementIterator iterator = new ElementIterator(htmlDoc); 
    Element element; 
    while ((element = iterator.next()) != null) { 
      AttributeSet attributes = element.getAttributes(); 
      Object name = attributes.getAttribute(StyleConstants.NameAttribute); 
      if ((name instanceof HTML.Tag) 
          && ((name == HTML.Tag.H1) || (name == HTML.Tag.H2) || (name == HTML.Tag.H3))) { 
        // Build up content text as it may be within multiple elements 
        StringBuffer text = new StringBuffer(); 
        int count = element.getElementCount(); 
        for (int i = 0; i < count; i++) { 
          Element child = element.getElement(i); 
          AttributeSet childAttributes = child.getAttributes(); 
          if (childAttributes 
              .getAttribute(StyleConstants.NameAttribute) == HTML.Tag.CONTENT) { 
            int startOffset = child.getStartOffset(); 
            int endOffset = child.getEndOffset(); 
            int length = endOffset - startOffset; 
            text.append(htmlDoc.getText(startOffset, length)); 
          } 
        } 
        System.out.println(name + ": " + text.toString()); 
      } 
    } 
    System.exit(0); 
  } 
} 
 
            
          
     
  
  |