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