- - PR -
JavaServletで検索した結果をXSLTでHTMLに変換して出力する仕方について
1|2|3
次のページへ»
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-10-19 18:12
こんにちは。Xindiceについて勉強している学生です。サンプルプログラムXindiceServelt2を用いてXML文書をHTMLに変換する個所についての質問です。コンパイルはできてクラスファイルは生成できました。しかし、実際にネットからアクセスしてみてもサンプルにあるような表みたいな画面が出力されずに真っ白です。なぜHTML形式で表示ができないのでしょうか?どうかご解答お願いいたします。
MSXML3.0はインストール済みです。ブラウザはIE6.0です。 | ||||
|
投稿日時: 2005-10-20 18:47
これは、@ITの記事を参考にしてやってみた、ということですか?
ブラウザからソース表示をしてみて、どのようなレスポンスが来ているか確認してみてください。 それから、クライアント側に来るときには既にHTMLになっているはずなので、MSXMLは関係 ありません。 | ||||
|
投稿日時: 2005-10-20 20:21
ご返答ありがとうございます。まだまだ知識が乏しく申し訳ありません。@ITの記事を思いっきり参考にやっています。ブラウザからの表示は記事にあるようなHTML表示がされずに真っ白な画面が出力されてしまいます。どのようにしたら@IT記事のように表示できるのでしょうか?よろしければご返答お願いいたします。
| ||||
|
投稿日時: 2005-10-20 21:04
えーと、だからまずソース表示(IEだと「表示」「ソース」)してみてください。
| ||||
|
投稿日時: 2005-10-20 21:15
申し訳ございませんでした。表示してみたところ
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML><HEAD> <META http-equiv=Content-Type content="text/html; charset=shift_jis"></HEAD> <BODY></BODY></HTML> と表示されました。 | ||||
|
投稿日時: 2005-10-20 21:32
なるほど、何も出力されていないようですね。ソースコードは@ITの記事と同じものですか?
さしつかえなければ、ソースの内容を載せてみてもらえませんか? | ||||
|
投稿日時: 2005-10-20 21:34
らいと申します。
ということは、XML -> HTMLはできてるけど、 肝心の表が表示されない、ということですね? 表示の際に使ったXSLや、コンパイルしたもののソースを 再チェックしてみたほうがよいかも。 # おそらく、XSLはダウンロードしたものを使ったのでしょうから、 # コンパイルしたもののソースを見たほうがいいと思います。 # あぁぁ、XML/XSLを使ってたのが数年前なので、 # そちら方面の構文とかちと忘れ気味です。orz _________________ 一寸先は闇 安定してるシステムって言ったじゃん(泣) | ||||
|
投稿日時: 2005-10-20 21:40
みなさんお返事ありごとうございます。まったく@ITの記事と同じものを使用しています。サーブレットのソースは以下のものを使用いたしました。XSLTも記事からダウンロードして使用しています。
import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import org.xmldb.api.base.*; import org.xmldb.api.modules.*; import org.xmldb.api.*; import org.w3c.dom.*; public class XindiceServlet2 extends HttpServlet { // HTTP GETに対応するメソッド public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // HTMLで返します response.setContentType("text/html; charset=Shift_JIS"); PrintWriter out = response.getWriter(); try { // 検索した結果をXSLTでHTMLに変換し出力します transform(out, getServletContext().getRealPath("/sample.xsl")); } catch (Exception e) { throw new ServletException(e); } finally { out.close(); } } // 検索した結果をスタイルシートstylesheetUrlを使ってXSLTでHTMLに変換し、 outに出力します public void transform(Writer out, String stylesheetUrl) throws Exception { String xpath = "//action"; javax.xml.transform.Transformer transformer = getTransformer(stylesheetUrl); transformer.transform(new javax.xml.transform.dom.DOMSource(searchWithXindice(xpath)), new javax.xml.transform.stream.StreamResult(out)); } // JAXPを使ってXSLTに使うTransformerを得ます private javax.xml.transform.Transformer getTransformer(String url) throws Exception { javax.xml.transform.TransformerFactory tFactory = javax.xml.transform.TransformerFactory.newInstance(); javax.xml.transform.Transformer transformer; transformer = tFactory.newTransformer(new javax.xml.transform.stream.StreamSource(url)); return transformer; } // XindiceからXPathを使って検索します private Document searchWithXindice(String xpath) throws Exception { Collection col = null; // 検索結果をまとめる要素<result>を作成する javax.xml.parsers.DocumentBuilderFactory docBuilderFactory = javax.xml.parsers.DocumentBuilderFactory.newInstance(); docBuilderFactory.setNamespaceAware(true); Document resultDocument = docBuilderFactory.newDocumentBuilder().newDocument(); // 次の設定はXindiceから取得したDOMオブジェクトをXercesでimportする ためには必要 ((org.apache.xerces.dom.DocumentImpl)resultDocument).setErrorChecking(false); Element resultElement = resultDocument.createElement("result"); resultDocument.appendChild(resultElement); try { // 1. Database実装クラスの登録 String driver = "org.apache.xindice.client.xmldb.DatabaseImpl"; Class c = Class.forName(driver); Database database = (Database) c.newInstance(); DatabaseManager.registerDatabase(database); // 2. コレクションの取得 col = DatabaseManager.getCollection("xmldb:xindice:///db/sampledb"); // 3. XPathQueryServiceの取得 XPathQueryService service = (XPathQueryService) col.getService("XPathQueryService", "1.0"); // 5. XPathで検索 ResourceSet resultSet = service.query(xpath); // 6. ResourceSetから検索結果を取り出す ResourceIterator results = resultSet.getIterator(); while (results.hasMoreResources()) { Resource res = results.nextResource(); if (res.getResourceType().equals("XMLResource")) { org.xmldb.api.modules.XMLResource xmlres = (org.xmldb.api.modules.XMLResource)res; org.w3c.dom.Node node = xmlres.getContentAsDOM(); resultElement.appendChild(resultDocument.importNode(node.getFirstChild(), true)); } } } catch (XMLDBException e) { throw new ServletException(e); } finally { if (col != null) { // 7. コレクションのクローズ col.close(); } } return resultDocument; } } なにか問題があればお願いいたします。 |
1|2|3
次のページへ»