トップ 差分 一覧 ソース 検索 ヘルプ RSS ログイン

BugTrack-その他のメモ/5

R備忘録 /状態空間モデリング/donlp2/その他のメモ

HTML・XML パース関連 メモ

  • 投稿者: みゅ
  • カテゴリ: Java
  • 優先度: 普通
  • 状態: 完了
  • 日時: 2009年11月16日 11時23分32秒

内容

  • HTML・XML パース関連メモ

HTML Parser

設定

  • ダウンロード
  • 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関連の読み込みでエラーがでるので後回しに・・・

リンク

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;
	}
}

コメント