<?xml version="1.0" encoding="UTF-8" ?>
<entry
	xmlns="http://www.w3.org/2005/Atom"
	xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/"
	xml:lang="ja-JP"
>
	<title>Mozilla Java Html Parserが動いた</title>
	<id>tag:txqz.net,2008-06-19:blog/2008/06/19/1424</id>
	<link rel="self" href="http://txqz.net/blog/2008/06/19/1424.atom"/>
	<link rel="alternate" type="application/rss+xml" href="http://txqz.net/blog/2008/06/19/1424.rdf"/>
	<link rel="alternate" type="application/xhtml+xml" href="http://txqz.net/blog/2008/06/19/1424.xhtml"/>
	<link rel="alternate" type="text/html" href="http://txqz.net/blog/2008/06/19/1424.html"/>
	<link rel="contents" href="http://txqz.net/blog/2008/06/19/.atom" title="2008年6月19日"/>
	<link rel="first" href="http://txqz.net/blog/2001/08/04/0001.atom" title="地球空冷化"/>
	<link rel="prev" href="http://txqz.net/blog/2008/06/12/1137.atom" title="ぜひ無責任に記事を書いていきましょう"/>
	<link rel="next" href="http://txqz.net/blog/2008/07/08/2258.atom" title="Googleの乗り換え検索は新しい駅名に対応していない"/>
	<link rel="last" href="http://txqz.net/blog/2008/11/06/2333.atom" title="はてなブックマークがリニューアルするみたいなので使い方などを振り返る"/>
	<author>
		<name>陽坂智佐</name>
		<email>spambasket@txqz.net</email>
	</author>
	<content type="xhtml">
		<div xmlns="http://www.w3.org/1999/xhtml">
<p><a href="http://txqz.net/blog/2008/01/24/1559" title="Mozilla Java Html Parserを使ってみた">5ヶ月前から放置して</a>いた<a href="http://mozillaparser.sourceforge.net/" title="Mozilla Java Html Parser">Mozilla Java Html Parser</a>だが、さっき入れなおしてみたら動いた。前回はMozillaHtmlParser.jarの中に入っていたcom.dappit.Dapper.parser.example.ParserExampleを参考にしたが、今回は<a href="http://mozillaparser.sourceforge.net/quickstart.html" title="Mozilla Java Html Parser">Quick Start</a>を参考にした、というかinitメソッドに渡す値が変だったのでそれを直せばよかったみたい。Quick Startに書いてあるとおりに、C:\Program Files\MozillaHtmlParser\mozilla.dist.bin.winとかを環境変数のPATHに加えたのだが、ソースにもその文字列をまた書くことになってしまった。多分もっと頭の良い方法があるのでそのうち調べる。</p>
<p>ソースは以下のとおり:</p>
<pre><code class="java">import java.io.File;

import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;

import com.dappit.Dapper.parser.EnviromentController;
import com.dappit.Dapper.parser.MozillaParser;

public class MJHP {
    public static void main(String[] args) throws Exception {
        File parserLibraryFile = new File("C:\\Program Files\\MozillaHtmlParser\\native\\bin\\MozillaParser" + EnviromentController.getSharedLibraryExtension()); 
        String parseLibrary = parserLibraryFile.getAbsolutePath(); 
        MozillaParser.init(parseLibrary, "C:\\Program Files\\MozillaHtmlParser\\mozilla.dist.bin.win"); 
        MozillaParser parser = new MozillaParser();
        Document document = parser.parse("&lt;html&gt;Hello world!&lt;/html&gt;");
        System.out.println(dom2string((Node)document.getDocumentElement()));
    }
    public static String dom2string(Node n) {
        StringBuilder buf = new StringBuilder();
        switch(n.getNodeType()) {
        case Node.TEXT_NODE :
            return n.getNodeValue();
        case Node.ELEMENT_NODE :
            buf.append(String.format("&lt;%s", n.getNodeName()));
            NamedNodeMap attrs = n.getAttributes();
            for(int i = 0; i &lt; attrs.getLength(); i++) {
                Node attr = attrs.item(i);
                buf.append(String.format(" %s=\"%s\"", attr.getNodeName(), attr.getNodeValue()));
            }
            buf.append("&gt;");
            for(Node child = n.getFirstChild(); child != null; child = child.getNextSibling()) {
                buf.append(dom2string(child));
            }
            buf.append(String.format("&lt;/%s&gt;", n.getNodeName()));
        }
        return buf.toString();
    }
}</code></pre>
<p>実行させると、以下のような出力を得られる:</p>
<pre><samp>Operating system : Windows XP
&lt;html&gt;&lt;body&gt;Hello world!&lt;/body&gt;&lt;/html&gt;
Initializing XPCOM from location : C:\Program Files\MozillaHtmlParser\mozilla.dist.bin.win...</samp></pre>
<p><a href="http://txqz.net/blog/2007/08/10/1200" title="ひどいHTMLをSAXパーサに読ませる">ひどいHTML特集</a>に<a href="http://txqz.net/blog/2007/08/10/1200#PS1213851391">Mozilla Java Html Parser編</a>を加えた。table直下にtbodyを補完するHTMLパーサは今のところこれだけ。その一方tr直下にtrが来てしまうなどの問題も見られた。</p>
		</div>
	</content>
	<category term="HTML"/>
	<category term="Java"/>
	<category term="パーサ"/>
	<category term="MozillaJavaHtmlParser"/>
	<trackback:ping>http://txqz.net/blog/2008/06/19/1424/tb</trackback:ping>
	<published>2008-06-19T14:24:09+09:00</published>
	<updated>2008-06-19T14:30:31+09:00</updated>
	<rights>Attribution-Noncommercial-Share Alike 3.0 Unported</rights>
</entry>