- PR -

XSLTでHTMLに変換する際の日本語URL

投稿者投稿内容
LAIN
会議室デビュー日: 2004/06/06
投稿数: 5
投稿日時: 2004-06-06 18:19
こんにちは。

Windows環境で、以下のようなことを実現したいと思っていますが
日本語ファイル名の処理で問題があり困っています。対応方法をご存知の方が
いらっしゃいましたらご教示頂ければと思います。
* あるフォルダ以下のファイル/フォルダ一覧を含むXMLファイルを生成する
* そのXMLファイルに対してXSLTを適用させHTMLを生成。各ファイルに
ハイパーリンクで飛べるようにする。

ここで、ファイル名やフォルダ名に日本語が含まれる場合、XSLTを適用した際に
URLがエンコードされ、ハイパーリンクをクリックしてもうまくファイルが開けません。
XML生成の際にあらかじめURLをSJISでエンコードしてみたのですが、それでも
だめでした。

正しくファイルが開けるようにするにはどのようにすれば良いでしょうか?
なお、XMLファイルをIE6.0で開いています。
MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 2004-06-06 21:23
ハイパーリンクの具体的文字列は?

あと、Webサーバ経由ですか、
IE 直でローカルのfile:リンクですか?
LAIN
会議室デビュー日: 2004/06/06
投稿数: 5
投稿日時: 2004-06-07 19:07
返信ありがとうございます。

ハイパーリンクの具体的文字列ですが、
元のXMLファイル(SJIS)で
<DocumentPath>
\\fileserver\フォルダ1\フォルダ2\サンプルファイル.doc
</DocumentPath>
となっているものを、

<xsl:element name="a">
<xsl:attribute name="href">
<xsl:value-of select="../DocumentPath"/>
</xsl:attribute>
<xsl:value-of select="."/>
</xsl:element>
というXSLTで変換しています。

webサーバは使用せずにIEに直にXMLファイルを読ませているのですが、出力された
ハイパーリンクにカーソルを合わせるとURLエンコードされた文字列が表示され、クリックしても
正しくファイルに到達できない状態です。

MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 2004-06-07 23:20
URL エンコードされたものを \\fileserver が解釈できないのでは?
Webサーバーなら URLエンコードを戻して解釈するでしょうが

<H TML><HEAD><TITLE>local href</TITLE></HEAD><BODY>
<P>
<A HREF="C:\Documents and Settings\KUBO\デスクトップ\0425">no file://</A>
<A HREF="file://C:\Documents and Settings\ZUKA\デスクトップ\0425">file://</A>
</P></BODY></H TML>

IEではなく N7とO7 では file:// をつけないとダメでした
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
IE の詳細設定では、URLを常にUTF-8で送る チェックがありますが、どうでしょう?

[ メッセージ編集済み 編集者: MMX 編集日時 2004-06-07 23:38 ]
LAIN
会議室デビュー日: 2004/06/06
投稿数: 5
投稿日時: 2004-06-08 13:24
なるほど、IE->fileserverへはエンコードされた文字列で
アクセスに行くのですね。ということはやはりIEが読み込む
時点でURLエンコードされないようにしないといけないですね。

URLのエンコード方式とfile://有無を変えて
いくつか試してみました。結果としてはどれもうまく
いかなかったのですが。。

1. SJISでURLエンコード, file://なし
-> NG (リンク先文字列はSJIS URLエンコード形式)
2. URLエンコードなし, file://なし
-> NG (リンク先はUTF-8 URLエンコード形式)
3. URLエンコードなし, file://あり
-> NG (リンク先は文字化け)
4. SJISでURLエンコード, file://あり
-> NG (リンク先は文字化け)

IEの"常にUTF-8としてURLを送信"はoffにしています。(今まではonでした)
URLエンコードなし、というのは、XMLファイル生成時にエンコードを
しない、という意味で、リンク先は・・というのは、ハイパーリンクに
カーソルを合わせた際ブラウザの下に表示されるリンク先文字列です。

上記3,4のパターンでリンク先が文字化けしないようになれば良いと
思うのですが。。もう少しやってみます。
MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 2004-06-08 18:09
\の代わりに / を使うとよいようです,どちらもOK、
Webの世界の書き方をすると通ります。

<A HREF="//filesever/share/部/課/グループ/vje2_5のパッチ/pp.TXT">no file://</A>
<A HREF="file://filesever/share/部/課/グループ/vje2_5のパッチ/pp.TXT">file://</A>

IEのアドレス欄の表示は ¥になっていますが
\\fileserver\share\部\課\グループ\vje2_5のパッチ\pp.TXT
-----------------------------------------------------
後は、Fileserver の動き? Win/Unix

[ メッセージ編集済み 編集者: MMX 編集日時 2004-06-09 11:20 ]
LAIN
会議室デビュー日: 2004/06/06
投稿数: 5
投稿日時: 2004-06-08 23:06
お付き合い頂きありがとうございます。
'\'を'/'に置換してやってみましたが、結果は一緒でした。

IEだとHTMLの変換結果が見えないので、XTなど別のXSLT
プロセッサを試してみようと思っています。
ゆう
常連さん
会議室デビュー日: 2003/06/27
投稿数: 45
投稿日時: 2004-06-21 17:41
http://www.atmarkit.co.jp/fxml/askxmlexpert/035xslterr/033xslterr.html

 上記記事にある「URIの値が非ASCII文字だった場合エスケープすべきである」
という決まりによる問題ではないでしょうか。

 出力形式をxmlにすると、href属性の値に日本語が含まれていてもそのまま出
力されます。IE6によるxmlからhtmlへの変換結果htmlから、ローカルの日本語
名称のファイルにリンクしてみましたが、私の環境では正常に開くことができ
ましたよ。

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