XSLT:JTidyを使ってXHTMLからデータを取り出す

CyberNeko HTML Parserを使うと上手くいかなかったんですが、JTidyっていうのを使ったら上手くいった。

webryblogの記事から記事タイトルとボディを抜いてみます。

ソース
String xsl = "xsl/webryblog.xsl";
String xml = "xsl/webryblog.xml";
//String out = "xsl/result.xml";
String encoding = "UTF-8";
try
{
  Tidy tidy = new Tidy();
  tidy.setQuiet(true);
  tidy.setInputEncoding(encoding);
  tidy.setOutputEncoding(encoding);
  tidy.setShowErrors(0);
  tidy.setShowWarnings(false);
  tidy.setForceOutput(true);

  Document tidyDOM = tidy.parseDOM(new FileInputStream(xml), null);

    StreamSource tplXsl = new StreamSource(xsl);
    TransformerFactory trf = TransformerFactory.newInstance();
    Transformer xslt = trf.newTransformer(tplXsl);
    xslt.setOutputProperty("encoding", encoding);
    xslt.transform(new DOMSource(tidyDOM), new StreamResult(System.out));

}
catch(Exception ex)
{
    ex.printStackTrace();
}
XSLファイル
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="text" encoding="UTF-8"/> 

  <xsl:template match="/">
    Title:
    <xsl:value-of select="//div[@id='blog-head']/h2"/>
    Body:    
    <xsl:value-of select="//*[@id='blog-body']"/>
  </xsl:template>

</xsl:stylesheet>
実行結果
    Title:
    (ここに切り出したタイトルが入る) 
    Body:    
    (ここに切り出したタイトルが入る) 

というわけで、多分上手くいったので各blogに対応するXSLファイルを作りまくれば色々抜けるかも。