book.xmlとbook.xslでbook.foに変換にxalanで実行しました。
>java org.apache.xalan.xslt.Process -in book.xml -xsl book.xsl -out book.fo
ところが、以下のようにエラーが出ました。
Exception in thread "main" java.lang.ClassCastException: org.apache.xalan.res.XSLTErrorResources_ja
at org.apache.xalan.xslt.Process.main(Process.java:209)
何が原因なのでしょうか?xalan-j_2_4_1のxalan.jarとxercesImpl.jarにはCLASSPATH設定をしています。
<book.xml>
<?xml version="1.0" encoding="Shift_JIS" ?>
<?xml:stylesheet type="text/xsl" href="book.xsl" ?>
<書籍管理>
<書籍情報 ID="1">
<書籍名>スタイルシート辞典 第2版</書籍名>
<著者>安川英明</著者>
<出版社>翔泳社</出版社>
<価格>1800</価格>
</書籍情報>
・・・
<書籍管理>
文字数が多くなってすべてbook.xslがかけませんでした。
テーブル形式で表示するようしたいのです。
<xsl:template match="書籍管理"><fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
・・・
<fo:table>
<fo:table-column column-width="50mm"/>
・・・
<fo:table-body><fo:table-row><fo:table-cell><fo:block>書籍名</fo:block></fo:table-cell>・・・</fo:table-row>
<xsl:apply-templates/>
</fo:table-body>
</fo:table>
</fo:flow></fo:page-sequence>
</fo:root></xsl:template>
<xsl:template match="書籍情報">
<fo:table-row><xsl:apply-templates/></fo:table-row>
</xsl:template>
<xsl:template match="書籍名">
<fo:table-cell><fo:block><xsl:value-of select='.'/></fo:block></fo:table-cell>
</xsl:template>
No.3ベストアンサー
- 回答日時:
No.2で回答した者です。
とりあえず、java.net.MalformedURLException: no protocol: book.xslとメッセージが出ているのだから、XSLTの書き方を疑うよりも、URL(つまりパス)を疑うべきだと思います。
以下の実験をしてみたところ、同じエラーが出ました。
(1) 問題なく動作するXSLTスタイルシートを用意
(2) 日本語の名前の付いたフォルダを作り、そこにファイルを入れてみる
(3) Xalanを呼び出す
日本語の名前の付いたフォルダに直接含まれていなくても、パスの途中に日本語の名前のフォルダがある(「デスクトップ」とか)とエラーになるようです。
したがって、パスの途中に日本語の名前のフォルダがないかどうか、チェックしてみて下さい。
ちなみに私は、日本語名や空白を含んだ名前のフォルダがパスに含まれない位置に、ファイルやツールをなるべく置くようにしています。コンピュータを使う場合の心がけのようなものです。
ありがとうございます。
おっしゃった通り日本語名フォルダが有った為、エラーが出ていたようです。
FOファイルが無事作成できました。
最後行の心がけ私も実行します!
No.2
- 回答日時:
もしかして、Java2 SDK 1.4を使ってませんか?
その場合は、Java実行時のオプションで、例えばxalan.jarとxercesImpl.jarがc:\xml_tool\xalan-j_2_4_0\binの中にある場合だと、以下のように指定すると、解決するかもしれません。
java -Djava.endorsed.dirs=c:\xml_tool\xalan-j_2_4_0\bin org.apache.xalan.xslt.Process -in book.xml -xsl book.xsl -out book.fo
私はこのエラーになったことがないのですが、参考URLにあるApacheのメーリングリストのアーカイブの中をClassCastExceptionで検索して、xalanに関係のありそうなところを見ると、この問題と対処法が載っていました。
Java2 1.4には標準でXML処理のインターフェイス(JAXP)の実装が組み込まれたために、最新のXerces, Xalanを使っているつもりでも、重複するクラスについてSDKに含まれる方を参照してしまうようです。1.4以上を使っている方で最新のXerces, Xalanを確実に使いたい場合には、今回のような問題がたとえなかったとしても、-Djava.endorsed.dirsでjarファイルのあるディレクトリを指定した方が良いようです。
参考URL:http://marc.theaimsgroup.com/
この回答への補足
確かにJava2 SDK 1.4を使っています。
教えていただいたように実行すると前のようなエラーは出なくなりました。
今度は、次のようなエラーが出たのですが、
XSLの書き方が間違っているからでしょうか?
何かおかしな点ありますか?
(Location of error unknown)XSLT エラー (javax.xml.transform.TransformerConfigura
tionException): javax.xml.transform.TransformerException: java.net.MalformedURLE
xception: no protocol: book.xsl
<?xml version="1.0" encoding="Shift_JIS"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format" version="1.0">
<xsl:template match="書籍管理">
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" language="ja">
<fo:layout-master-set>
<fo:simple-page-master master-name="page"
page-height="300mm" page-width="300mm"
margin-top="10mm" margin-bottom="10mm"
margin-left="20mm" margin-right="20mm">
<fo:region-body margin-top="0mm"
margin-bottom="10mm"
margin-left="0mm"
margin-right="0mm"/>
<fo:region-after extent="10mm"/>
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="page">
<fo:flow flow-name="xsl-region-body">
<fo:block font-weight="bold" font-size="36pt"
line-height="48pt" font-family="MSGothic"
color="blue">
書籍情報
</fo:block>
<fo:table background-color="#cfffcf">
<fo:table-column column-width="55mm"/>
<fo:table-column column-width="30mm"/>
<fo:table-column column-width="30mm"/>
<fo:table-column column-width="30mm"/>
<fo:table-column column-width="45mm"/>
<fo:table-column column-width="40mm"/>
<fo:table-column column-width="30mm"/>
<fo:table-body>
<fo:table-row>
<fo:table-cell border-width="1mm" border-style="solid">
<fo:block font-size="18pt">書籍名</fo:block>
</fo:table-cell>
<fo:table-cell border-width="1mm" border-style="solid">
<fo:block font-size="18pt">著者</fo:block>
</fo:table-cell>
<fo:table-cell border-width="1mm" border-style="solid">
<fo:block font-size="18pt">出版社</fo:block>
</fo:table-cell>
<fo:table-cell border-width="1mm" border-style="solid">
<fo:block font-size="18pt">価格</fo:block>
</fo:table-cell>
<fo:table-cell border-width="1mm" border-style="solid">
<fo:block font-size="18pt">ISBN番号</fo:block>
</fo:table-cell>
<fo:table-cell border-width="1mm" border-style="solid">
<fo:block font-size="18pt">分類</fo:block>
</fo:table-cell>
<fo:table-cell border-width="1mm" border-style="solid">
<fo:block font-size="18pt">所有者</fo:block>
</fo:table-cell>
</fo:table-row>
<xsl:apply-templates/>
</fo:table-body>
</fo:table>
</fo:flow>
</fo:page-sequence>
</fo:root>
</xsl:template>
<xsl:template match="書籍情報">
<fo:table-row background-color="#ffffcf">
<xsl:apply-templates/>
</fo:table-row>
</xsl:template>
<xsl:template match="書籍名">
<fo:table-cell border-width="1mm" border-style="solid">
<fo:block><xsl:value-of select='.'/></fo:block>
</fo:table-cell>
</xsl:template>
<xsl:template match="著者">
<fo:table-cell border-width="1mm" border-style="solid">
<fo:block><xsl:value-of select='.'/></fo:block>
</fo:table-cell>
</xsl:template>
<xsl:template match="出版社">
<fo:table-cell border-width="1mm" border-style="solid">
<fo:block><xsl:value-of select='.'/></fo:block>
</fo:table-cell>
</xsl:template>
<xsl:template match="価格">
<fo:table-cell border-width="1mm" border-style="solid">
<fo:block><xsl:value-of select='.'/></fo:block>
</fo:table-cell>
</xsl:template>
<xsl:template match="ISBN番号">
<fo:table-cell border-width="1mm" border-style="solid">
<fo:block><xsl:value-of select='.'/></fo:block>
</fo:table-cell>
</xsl:template>
<xsl:template match="分類">
<fo:table-cell border-width="1mm" border-style="solid">
<fo:block><xsl:value-of select='.'/></fo:block>
</fo:table-cell>
</xsl:template>
<xsl:template match="所有者">
<fo:table-cell border-width="1mm" border-style="solid">
<fo:block><xsl:value-of select='.'/></fo:block>
</fo:table-cell>
</xsl:template>
</xsl:stylesheet>
No.1
- 回答日時:
原因はClassCastExceptionですので「データ型があってないよ」ってことなんですが...
Processクラスはapacheの提供するクラスでなのでバグなんですかねー..
ためしにソースをDLして209行目付近を見てみました
ResourceBundle resbundle =
(XSLMessages.loadResourceBundle(
org.apache.xml.utils.res.XResourceBundle.ERROR_RESOURCES));
でAPIドキュメントを見てみると
ResourceBundle XSLMessages.loadResourceBundle(String)
String XResourceBundle.ERROR_RESOURCES
となっているので問題なさそうです...うーむ
ためしに自分のマシンにはいってるjaxpからxslファイルからhtmlへ
変換してみましたが問題なく変換できました。
そこで、
・一度ほかのサンプルファイルを作成して実行してみる(FOじゃないやつとか)
・ほかのバージョンをDLして実行してみる
と確認してみてはいかがでしょうか?
あんまりまとまってないですねスミマセン
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
XML、XSLTの適応エラー(IEから...
-
CPUの考え方を教えてください ...
-
XSLTで固定長データファイルを...
-
TreeViewで複数ノードの選択は...
-
eclipseへのxmlファイル追加
-
同じタグ名の項目取得
-
DelphiのTreeViewでの+ボタン...
-
MagpieRSSを使用して自分のHPに...
-
特殊記号が勝手にエスケープさ...
-
VBAの一括型宣言について
-
XPathで途中に名前空間が設定さ...
-
Access VBAでXMLが読み込めない
-
C#のツリービューでツリーノー...
-
■XSLT■固定文字を使ったループ...
-
XMLで要素が記述された順番に意...
-
VB2005 ツリービューに子ノード...
-
VB2005 TreeViewの任意ノード選択
-
SNMP ステータスポーリングと...
-
XMLファイルの作り方がわかりま...
-
XMLのHTMLへの変換 (初心者)
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
XML、XSLTの適応エラー(IEから...
-
xmlファイルが上手にHTMLに変換...
-
XMLを出力する時のエラー原因
-
不特定ノードに出現する同じタ...
-
xmlstarletで他ファイルからエ...
-
XSLTによるノードの抽出の際に...
-
xsltを利用して変換後改行が入る
-
XMLの属性について。
-
ネスケで表示させたいんですが...
-
XSLTの国際化のやり方
-
CPUの考え方を教えてください ...
-
東芝のDynabookなのですがアン...
-
XMLで要素が記述された順番に意...
-
SNMP リンクダウンとノードダ...
-
ルート要素ノードが2個ある場合?
-
昔Winnyってありましたけど、あ...
-
バッチファイルでテキストファ...
-
C#でTreeViewのCheckBoxのサイ...
-
同じタグ名の項目取得
-
4バイトを10進数に変換する方法
おすすめ情報