2012-03-06 12 views
3

javaのHTMLEditorKitの助けを借りてTITLE属性を取得したいですか? これは私が書いたものですが、それは "null"を返すでしょうし、Eclipseのインスペクタはそれほど助けにはならないのです!HTMLEditorKitの助けを借りてHTMLのTITLEを取得する方法

import java.io.FileReader; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.io.Reader; 
import java.net.URL; 
import javax.swing.text.MutableAttributeSet; 
import javax.swing.text.html.HTML; 
import javax.swing.text.html.HTMLEditorKit; 
import javax.swing.text.html.parser.ParserDelegator; 
public class testHTML 

{ 
    public static void main(String args[]) throws Exception 
    { 

    Reader reader = new FileReader("C:\\wamp\\www\\t\\index.html"); 

    new ParserDelegator().parse(reader, new LinkPage(), true); 

    } 
} 
class LinkPage extends HTMLEditorKit.ParserCallback 
{ 
    public void handleSimpleTag(HTML.Tag tag, 
      MutableAttributeSet attributes, int pos) { 

     if (tag == HTML.Tag.TITLE) 
     { 
      System.out.println(attributes.getAttribute(HTML.Attribute.TITLE)); 
     } 
    } 
    public void handleStartTag(HTML.Tag t, MutableAttributeSet a, int pos) 
    { 
// if (t == HTML.Tag.A) 
// { 
//  //System.out.println("<BR>"); 
//  
// } 
// if(t == HTML.Tag.TITLE) 
// { 
//  System.out.println(t.toString()); 
//  System.out.println(t.TITLE); 
//  System.out.println(); 
//  String text = (String)a.getAttribute(HTML.Attribute.TITLE); 
//  Object o = a.getAttribute(HTML.Attribute.TITLE); 
//  System.out.println(a); 
//  System.out.println(o); 
//  System.out.println(text); 
// } 
// 
     handleSimpleTag(t, a, pos); 
    } 
} 

とHTMLの内容は次のとおりです。

<html> 
<head> 
<title>test</title> 
</head> 
<body> 
test 
<a href="http://localhost/t/1.html">link1</a> 
sdf 
<a href="http://localhost/t/2.html">link2</a> 
sdf 
<a href="http://localhost/t/1.html">link3</a> 
sdf 
<a href="http://localhost/t/2.html">link3</a> 
</body> 
</html> 

PS:私はXPATH、REGEXかつ簡単な方法でHTMLのattrinutesを取得するための任意の他のサードパーティ製のコンポーネントの承知していますが、私は勉強したいですハードな方法。

+2

SSCCEを投稿できますか? – StanislavL

+0

編集中.......... –

答えて

6
import javax.swing.text.MutableAttributeSet; 
import javax.swing.text.html.HTML; 
import javax.swing.text.html.HTMLEditorKit; 
import javax.swing.text.html.parser.ParserDelegator; 
import java.io.Reader; 
import java.io.StringReader; 

public class Test2 { 
    public static final String content = "<html> \n" + 
      "<head> \n" + 
      "<title>test</title> \n" + 
      "</head> \n" + 
      "<body> \n" + 
      "test \n" + 
      "<a href=\"http://localhost/t/1.html\">link1</a> \n" + 
      "sdf \n" + 
      "<a href=\"http://localhost/t/2.html\">link2</a> \n" + 
      "sdf \n" + 
      "<a href=\"http://localhost/t/1.html\">link3</a> \n" + 
      "sdf \n" + 
      "<a href=\"http://localhost/t/2.html\">link3</a> \n" + 
      "</body> \n" + 
      "</html> "; 

    public static void main(String args[]) throws Exception { 
     Reader reader = new StringReader(content); 
     new ParserDelegator().parse(reader, new LinkPage(), true); 
    } 
} 

class LinkPage extends HTMLEditorKit.ParserCallback { 
    int startPos = -1; 

    public void handleText(char[] data, int pos) { 
     if (startPos >= 0) { 
      startPos = pos; 
     } 
    } 

    public void handleEndTag(HTML.Tag t, int pos) { 
     super.handleEndTag(t, pos); 
     if (t == HTML.Tag.TITLE) { 
      System.out.println(Test2.content.substring(startPos, pos)); 
      startPos = -1; 
     } 
    } 

    public void handleStartTag(HTML.Tag t, MutableAttributeSet a, int pos) { 
     super.handleStartTag(t, a, pos); 
     if (t == HTML.Tag.TITLE) { 
      startPos = pos; 
     } 
    } 
} 
関連する問題