カテゴリー別アーカイブ: xml

XML、XSL、XSLTのファイル名文字化けの苦悩、実装・開発記録、サンプルあり。。。

XMLやXSL、XSLTのファイル名文字化けでの苦悩を実装してみて開発してみて記録しました
サンプルも少しあります。。。

WEB開発でXMLを覚えて便利に使っていたのですが。。。
どうやら問題がありました。。。;
(第1回はこちらです⇒XML、XSL、XSLTの実装・開発記録、サンプルあり。。。

XSLTでXMLを「ローカルマシン」で実行する場合ですが!!!

2バイト文字が、全角文字が扱いにくい。

<xsl:value-of select=”description”/>
で、出力するだけなら全角(2バイト文字)でも全然問題ないようです。

そこで問題となるのがタグの属性値に2バイト文字をセットする場合です。

<xsl:template match=”item”>
<xsl:element name=”a”>
<xsl:attribute name=”href”>
../data/新規 Word 文書.doc
</xsl:attribute>
<xsl:value-of select=”title”/>
</xsl:element>
</xsl:template>

「新規 Word 文書.doc」のファイル名がエンコードされて出力されるため
ローカルマシンでは正しく開きません。。。
err01

どうしようか。。。。。。。。。

なんだかんだで1日使いましたが何とか、2バイト文字の回避策見つけました。

こんな感じです。;;;;;;;;;;;;;;

<xsl:template match=”item”>
<xsl:element name=”a”>
<xsl:attribute name=”id”>
<xsl:value-of select=”linkId”/>
</xsl:attribute>
<xsl:attribute name=”href”>
../data/新規 Word 文書.doc
</xsl:attribute>
<xsl:value-of select=”title”/>
</xsl:element>
</xsl:template>

<xsl:template match=”itemPath”>
var testdata = ‘../data/新規 Word 文書.doc’;
document.all.<xsl:value-of select=”linkId”/>.href=testdata;
</xsl:template>

ようするに、Javascriptでhref属性値に入れなおしてあげればよかったということです。
何故なら、最初のほうで述べたように直に出力するなら2バイト文字もエンコードされませんので
スクリプトにhref属性値に出力したい値を出力して、Javascriptでhref属性値に入れなおしてあげれば解決です。
ok01

なんて回りくどいことを。。。。

もっと簡単にできる方法をお持ちでしたらご教授ください。

もう一度言いますが、ローカルマシンで直実行するときに問題なのです。
私の製作しているアプリの取説用ですから。。。あしからず
■WEBサーバからのHTTP経由なら問題ないようです↓
<a target=”_blank” href=”http://www.atmarkit.co.jp/fxml/askxmlexpert/035xslterr/033xslterr.html”>http://www.atmarkit.co.jp/fxml/askxmlexpert/035xslterr/033xslterr.html</a>

xsltの基本はこちらを参考に⇒XML、XSL、XSLTの実装・開発記録、サンプルあり。。。

XMLのリンクリストでのXSLT変換でリンクしたパスが文字化けする

XMLのリンクリストでのXSLTデータビュー変換でリンクしたパスが文字化けする問題を解決する。

XML定義したXSLT内で日本語を含むURI(URL)が文字化けしてしますのは、HTMLの仕様だそうです。。。はぁぁ

HTMLの規約では「href」アトリビュートを記述したときに、「URIの値が非ASCII文字だった場合エスケープする」という内容があり、
リンクのリストに日本語などを含むファイル名などのURI(URL)を入れた場合、エスケープにより表記が変わってしまうためだそうです。

リンクリストの出力形式を指定している「xsl:output」の「methodをhtmlからxml」に変更したところ文字化けが解消されました!

参考サイト:
http://www.atmarkit.co.jp/fxml/askxmlexpert/035xslterr/033xslterr.html

解決したので、ガツガツWEB製作やりまっせ!
あーーーーーーーすっきり。

XML、XSL、XSLTの実装・開発記録、サンプルあり。。。

XMLやXSL、XSLTの実装で苦労した開発記録です。サンプルも少しあります。。。

 

WEB開発で疲れたこのごろ、どうにか開発を楽にできないかと。。。
なんだかそればかり考えて開発してますね。。。;

そういえば、お客様提供の取扱い説明書(取説)をHTMLで作っていましたが
これもシステム化しちゃえと、ゴリゴリ開発していたのです。

ヒョンなことから「XSLT」と出会い、試行錯誤しXSLT開発してみました。

なかなか使えそうです。。。

XMLに必要な情報、データなどを作り、デザインテンプレートとしてXSLTを使う
といった具合に動作します。
(奥が深いのでこんな適当ーな感じで説明しちゃいます)

とりあえずはじめに作ったサンプルです、ここから改造してゆきました。

■XSLT(sample1.xsl)
<?xml version=”1.0″ encoding=”utf-8″?>
<?xml-stylesheet type=”text/xml”?>
<xsl:stylesheet version=”1.0″ xmlns:xsl=”http://www.w3.org/1999/XSL/Transform”>

<xsl:template match=”/”>
<html>
<body>

<div>
<xsl:apply-templates select=”/rss/channel/item” />
</div>

<div>XHTMLについて</div>

</body>
</html>
</xsl:template>
<xsl:template match=”item”>
<xsl:element name=”a”>
<xsl:attribute name=”href”>
<xsl:value-of select=”link”/>
</xsl:attribute>
<xsl:attribute name=”target”>
_blank
</xsl:attribute>
<xsl:value-of select=”title”/>
</xsl:element>
<br />
<xsl:value-of select=”description”/>
<br />
<br />
</xsl:template>

</xsl:stylesheet>

■XSLT(sample1.xml)
<?xml version=”1.0″ encoding=”UTF-8″?>
<?xml-stylesheet type=”text/xsl” href=”sample1.xsl”?>
<rss>
<channel>
<item>
<title>TOP</title>
<link>index.htm</link>
<description>TOPページに行く</description>
</item>
<item>
<title>ページ1</title>
<link>X1.htm</link>
<description>HTMLからXHTMLへ XHTML、UTF-8(UNICODE)対応のホームページにする(文字化け対策)</description>
</item>
<item>
<title>ページ2</title>
<link>X2.htm</link>
<description>HTMLからCSSへ &lt;table&gt;をfloatに変える</description>
</item>
<item>
<title>サンプルダウンロード</title>
<link>X3.htm</link>
<description>HTMLからCSSへ リスト(&lt;ul&gt;,&lt;li&gt;)を横に並べ、ページタグのようなリンクボタンの作成</description>
</item>
</channel>
</rss>

 

とにかくですね、XSLTにテンプレートを作っておけば、
あとは、XMLデータを変えるだけで中身が変わります。

とっても便利ですよね、取説なんかはデザインや構造が一緒で文面が違うだけですから。
中身の文字データだけ変更すればいいだけ、なんて便利なんでしょうか。

もっとできることがありそうですね。

■先ずはXMLの基本、XSLTを基本から勉強しましょう↓
<a target=”_blank” href=”http://www.atmarkit.co.jp/fxml/rensai2/xmlmaster10/master10.html”>http://www.atmarkit.co.jp/fxml/rensai2/xmlmaster10/master10.html</a>