- PR -

サーブレットからXMLファイルを生成する方法

投稿者投稿内容
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2005-01-22 00:26
試しに、例外の起こる手前で
System.out.println(new File("xx").getAbsolutePath());
ってやってみて下さい。
実行している場所のカレントディレクトリがわかると思います。
けむ
常連さん
会議室デビュー日: 2003/09/26
投稿数: 40
投稿日時: 2005-01-24 10:08
引用:

javaアプリとサーブレットで、なにか違いがあるのでしょうか?


javaアプリとサーブレットに違いがあるのではなく、使用しているパーサーの実装が違うのだと思います。

本題ですが、XML(XSL)ファイルのパス(または、そのファイルから外部参照しているファイル)にascii文字以外が含まれていませんか?
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2005-01-24 16:23
「unknown protocol: f」ってのが引っかかりますね。XSLの中にファイルの絶対パスを
(f:\xxx\xxxといったように)指定している部分がないでしょうか。
naoki
会議室デビュー日: 2005/01/20
投稿数: 6
投稿日時: 2005-01-25 11:44
-- javaアプリとサーブレットに違いがあるのではなく、使用しているパーサーの実装が違うのだと思います。
すみません。javaアプリ・サーブレットが実装しているパーサーを調べるにはどうすればいいのでしょうか?

-- 本題ですが、XML(XSL)ファイルのパス(または、そのファイルから外部参照しているファイル)にascii文字以外が含まれていませんか?
パスにascii文字以外を使用していました。パスワード変更.xsl→passchg.xslに変更したら
PXDファイルを作成できました。本当にありがとうございました。

パスワード変更.xml→passchg.xml
パスワード変更.xsl→passchg.xsl
パスワード変更.pxd→passchg.pxd
と変更したのですが、日本語のファイルを出力した方がわかりやすいので、出来れば日本語のファイル名にしたいのですが
日本語のファイル名で出力するのは無理なのでしょうか?

javaアプリでは日本語のファイル出力OK
サーブレットは日本語のファイル出力NG
だったのですが、それはお互いが使用しているパーサーの実装が違うためという認識であっているのでしょうか?

***************************
***** XML・XSLファイル *****
***************************
XMLファイル
<?xml version="1.0" encoding="Shift_JIS"?>
<?xml-stylesheet type="application/xml" href="../xsl/パスワード変更.xsl"?>
<パスワード変更>
<タイトル>XXX</タイトル>
<会社>XXX</会社>
<所属>XXX</所属>
<氏名>XXX</氏名>
<変更日>XXX</変更日>
<変更前パスワード>XXX</変更前パスワード>
<変更後パスワード>XXX</変更後パスワード>
</パスワード変更>


XSLファイル
<?xml version="1.0" encoding="Shift_JIS"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="pxd" encoding="Shift_JIS" indent="yes" />

<!-- 文書 -->
<xsl:template match="/">
<pxd paper-type="A4">
<page>
<svg width="21cm" height="29.7cm" viewBox="0 0 2100 2970">
<text x="200" y="500" font-size="200" >
<xsl:value-of select="/cars/data" />
</text>
<line stroke-width="1" x1="200" y1="500" x2="1200" y2="500"/>
</svg>
</page>
</pxd>
</xsl:template>

</xsl:stylesheet>
けむ
常連さん
会議室デビュー日: 2003/09/26
投稿数: 40
投稿日時: 2005-01-25 13:14
引用:

naokiさんの書き込み (2005-01-25 11:44) より:
すみません。javaアプリ・サーブレットが実装しているパーサーを調べるにはどうすればいいのでしょうか?


以前、mogeさんがコメントしているのですが、試したのでしょうか?

引用:

パスワード変更.xml→passchg.xml
パスワード変更.xsl→passchg.xsl
パスワード変更.pxd→passchg.pxd
と変更したのですが、日本語のファイルを出力した方がわかりやすいので、出来れば日本語のファイル名にしたいのですが
日本語のファイル名で出力するのは無理なのでしょうか?


スキーマを外部ファイルとして参照する場合、パスはURIとして解釈されます。
そのため、URIとして使用できない文字(日本語など)があると(少なくとも)Xercesではうまく動作しません。
Transformerを使っているようなので、どこで外部ファイルを参照する必要があるのかはわかりませんが、同様の現象が発生しているのだと思います。

引用:

javaアプリでは日本語のファイル出力OK
サーブレットは日本語のファイル出力NG
だったのですが、それはお互いが使用しているパーサーの実装が違うためという認識であっているのでしょうか?


そういうことだと思います。
naoki
会議室デビュー日: 2005/01/20
投稿数: 6
投稿日時: 2005-01-25 15:23
-- 以前、mogeさんがコメントしているのですが、試したのでしょうか?
試した結果です

***** ソース *****
TransformerFactory transFactory = TransformerFactory.newInstance();
Transformer transformer = transFactory.newTransformer();
System.out.println("クラス名1:"+transFactory.getClass()+getName());
System.out.println("クラス名2:"+transformer.getClass().getName());
***** 結果(サーブレット) *****
クラス名1:org.apache.xalan.processor.TransformerFactoryImpl
クラス名2:org.apache.xalan.transformer.TransformerIdentityImpl

というふうに返ってきたのですがxalanがパーサーの名前になるのでしょうか?
たびたび聞いて大変申し訳ないのですが…。

スキルアップ/キャリアアップ(JOB@IT)