!!!HTML・XML パース関連 メモ
*投稿者: みゅ
*カテゴリ: Java
*優先度: 普通
*状態: 完了
*日時: 2009年11月16日 11時23分32秒
//{{bugstate}}
!!内容
*HTML・XML パース関連メモ
!!HTML Parser
!設定
*ダウンロード
**http://htmlparser.sourceforge.net/
**HTMLParser-2.0-SNAPSHOT-bin.zip
**HTMLParser-2.0-SNAPSHOT-doc.zip
**HTMLParser-2.0-SNAPSHOT-src.zip
*Eclipseへの登録
**適当なサンプル用のプロジェクトを作成する
**そのプロジェクトのプロパティで「Javaのビルド・パス」の項目を表示
**ライブラリタブを表示
**「外部 JAR の追加ボタンで登録をする
***filterbuilder.jar・htmllexer.jar・htmlparser.jar・sitecapturer.jar・thumbelina.jar
!!XML
*Xerces-J-bin.2.9.1.tar.gz、Xerces-J-src.2.9.1.tar.gz
*XMLのほうは、DTD関連の読み込みでエラーがでるので後回しに・・・
!!リンク
*http://www.mlab.im.dendai.ac.jp/~yamada/ir/HTMLParser/
*[HTMLからリンクを抽出する|http://d.hatena.ne.jp/junya_asa/20060429/1146313933]
*Eclipse関連
**[Eclipse−3.便利な機能(環境設定)|http://www.javaroad.jp/opensource/js_eclipse8.htm]
***ライブラリの登録(クラスパスの設定)とか
!!RSSからリンクを抽出する
*DomParseDemo2
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.w3c.dom.*;
import org.apache.xerces.parsers.*;
import org.xml.sax.*;
class DomParseDemo2 {
public static void main(String[] args) {
try {
// DOMパーサの生成
DOMParser parser = new DOMParser();
// エラー・ハンドラの登録
parser.setErrorHandler(new MyHandler());
// XML文書の取得
//parser.parse(args[0]);
//parser.parse("http://rss.yomiuri.co.jp/rss/yol/topstories");
parser.parse("http://rss.asahi.com/f/asahi_newsheadlines");
// Documentインスタンスの取得
Document doc = parser.getDocument();
if( doc.getNodeType() == Node.DOCUMENT_NODE ){
System.out.println("This is Document!");
}
Node child = doc.getFirstChild();
System.out.println(child.getNodeName());
NodeList gchildren = doc.getChildNodes();
for (int i = 0; i < gchildren.getLength(); i++) {
Node gchild = gchildren.item(i);
System.out.println("Name: " + gchild.getNodeName());
}
//ArrayListのテスト
List hs1 = new ArrayList(); //(1)ArrayListオブジェクトの生成
for (int i = 0; i < 10; i++) {
hs1.add(new Integer(i)); //(2)要素の追加
}
System.out.println("ArrayListの要素" + hs1); //(3)要素の表示
List al1 = new ArrayList();
al1.add(hs1);
al1.add(hs1);
System.out.println("ArrayListの要素" + al1); //(5)要素の表示
GetItem01 tmp = new GetItem01(doc);
List Items = tmp.getItem();
System.out.print(Items);
} catch (Exception e) {
e.printStackTrace();
}
}
}
class MyHandler implements ErrorHandler {
public void warning(SAXParseException e) {
System.out.println("警告: " + e.getLineNumber() +"行目");
System.out.println(e.getMessage());
}
public void error(SAXParseException e) {
System.out.println("エラー: " + e.getLineNumber() +"行目");
System.out.println(e.getMessage());
}
public void fatalError(SAXParseException e) {
System.out.println("深刻なエラー: " + e.getLineNumber() +"行目");
System.out.println(e.getMessage());
}
}
*GetItem01
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class GetItem01 {
protected Document doc;
protected List hs;
protected List retTable;
public GetItem01(Document inDoc){
doc = inDoc;
retTable = new ArrayList();
}
protected void internalFn1(Node child, boolean itemFlag){
NodeList children = child.getChildNodes();
for (int i = 0; i < children.getLength(); i++) {
if( itemFlag && children.item(i).getNodeName() == "title" ){
hs = new ArrayList();
hs.add("title");
hs.add(children.item(i).getChildNodes().item(0).getNodeType());
hs.add(children.item(i).getTextContent());
//System.out.println(hs);
} else if( itemFlag && children.item(i).getNodeName() == "link" ){
hs.add("link");
hs.add(children.item(i).getTextContent());
//System.out.println(hs);
} else if( children.item(i).getNodeType() == Node.TEXT_NODE ){
//
} else{
//System.out.println("Name: " + children.item(i).getNodeName());
if(children.item(i).getNodeName() == "item" ){
internalFn1(children.item(i), true);
//System.out.print(hs.get(1));
if( Integer.valueOf(hs.get(1).toString()) == Node.TEXT_NODE ){
retTable.add(hs);
}
itemFlag = false;
} else{
internalFn1(children.item(i), itemFlag);
}
}
}
return;
}
public List getItem(){
NodeList children = doc.getChildNodes();
for( int i=0; i < children.getLength(); i++ ){
System.out.println("Name: " + children.item(i).getNodeName());
internalFn1(children.item(i), false);
}
//System.out.print(retTable);
return retTable;
}
}
!!コメント
//{{comment}}