1read 100read
2011年12月2期WebProg36: XSL/XSLT (537) TOP カテ一覧 スレ一覧 2ch元 削除依頼
・ 次のスレ
37: アプリケーションサーバって必要? (206)
38: i-2chをEZwebでも正常に見れるように (93)
39: PHPを教えることになりました (83)
40:     【大人のCGIスクリプト】買った?     (69)

XSL/XSLT


1 :01/09/05 〜 最終レス :10/08/26
語ろう。ていうか教えて。

2 :
XSLT文書の実行時書き換えってどうやるんでしょう。涙。

3 :
DOMでXSLTを生成すりゃいいんでないの?

4 :
XSLTで読み書き可能なグローバル変数を使うにはどうしたらいいの?
<?xml version="1.0" encoding="Shift_JIS"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:user="." version="1.0" exclude-result-prefixes="msxsl user">
<xsl:output method="html" version="4.0" encoding="Shift_JIS"/>
<xsl:variable name="default_name"/>
<xsl:template match="/root">
<html lang="ja">
<head>
<title><xsl:value-of select="title"/></title>
</head>
<body>
<h1><xsl:value-of select="title"/></h1>
<xsl:apply-templates select="book" />
</body>
</html>
</xsl:template>
<xsl:template match="talk">
<xsl:if test="@name!=''">
<xsl:value-of select="@name"/>「
</xsl:if>
<xsl:if test="@name=''">
<xsl:value-of select="$default_name"/>「
</xsl:if>
</xsl:template>
<xsl:template match="defaultname">
<xsl:variable name="default_name" select="."/>
</xsl:template>
こんな感じで書いてるんだが、変数の書き換えができないみたい。
環境は MSXML3.0SP1 + MSXSL.exe

5 :
「読み書き可能なグローバル変数」の直接の解では無いし
元の XML ややりたい事がはっきりしないので的外れかもしれんが
<xsl:variable name="default_name"/>
のところを
<xsl:variable name="default_name">
<xsl:value-of select="/root/defaultname" />
</xsl:variable>
とかにするだけではダメなのか?

6 :
>>5
ありがとう。
defaultname要素の場所が固定なら、それでいいかも知れない。
とりあえずはスクリプトを使っておくよ…。
さりげなく下逸マンセー

7 :
XSLTの文法チェッカってあり?

8 :
>>2 XMLパーフェクトブック になんか書いてあるみたいだよ?
目次しかしらん。
誰か読んでない?

9 :
XSLTで、たくさんある要素をテーブルにしたいんだけど
どう書けばいいんだろう???
<datalist>
<data>a</data>
<data>b</data>
<data>c</data>
<data>d</data>
<data>e</data>
<data>f</data>
</datalist>

a b c
d e f
という表にするイメージ。

10 :
(´-`).。oO(HTMLのtable要素なのか、
       データベースのテーブルなのか、TeXのテーブルなのか、
       一体どのテーブルなんだろう?)

11 :
あーごみんなさい。HTMLのtable要素です。
<table>
<tr><td>a</td><td>b</td><td>c</td></tr>
<tr><td>d</td><td>e</td><td>f</td></tr>
</table>
にしたいのです。

12 :
<xsl:for-each select="datalist/data">
<xsl:if test="position() mod 3 = 0"><tr></xsl:if>
<td>…</td>
<xsl:if test="position() mod 3 = 0"></tr></xsl:if>
</xsl:for-each>
のようにやってみたのですが、
(1)<td>〜</td><td>〜</td><tr><td>〜</td></tr>の順に出力される
(2)<tr>が<tr>と出力されるためタグとして機能しない
という状態になっています。かなりしょんぼりしています。

13 :
>>9=>>11-12です

14 :
XSLTの文法チェッカってありますか?

15 :
あ。>>7さんとだぶってた。すんません。

16 :
<xsl:for-each select=".." >
...
</xsl:for-each>
の中で、<xsl:value-of select="javascript:test(.)">
などとやった場合、
function test( arg )
に渡される引数argを文字列として扱いたいんですが、
どうにもうまく行きません。どなたか分かる方いらっしゃいますか?

17 :
ふーん

18 :
9に便乗なんだけど、9のXMLを <xsl:for-each> を使わずに
1 a
2 b
3 c
4 d
5 e
6 f
のように出力することってできます?<xsl:variable>をインクリメントさせながら
変換していくようなイメージ…。for-eachのカウンタを変数としてとれるならそれで
もいいんですけど…。

19 :
>>18
<xsl:for-each> と <xsl:number> を組み合わせれば良いのでは?
for-eachを使わない方法なんて考えられないでしょ
<data>が6個固定とかならいざ知らず

20 :
>>18
<OL>
<LI>a</LI>
<LI>  (以下略.............ワラ

21 :
>>9
かなーり遅レスですがこんな感じじゃだめですか?
<table border="1">
<tr>
<xsl:for-each select="datalist/data">
<td><xsl:value-of select="..."/><br/></td>
<xsl:if test="position() mod 3 = 0"></tr><tr></xsl:if>
</xsl:for-each>
</tr>
</table>

22 :
他鯖にあるXMLファイルを取り込んで表示とかはできるの?

23 :
>>21 さんきゅうです

24 :
>>22
document()関数を使えばできそげ。
http://www.infoteria.com/jp/REC-xslt-19991116-jpn.htm#document
URI指定で他鯖を指定すれば良いんでないの?
ところでdocument()関数の説明に第2引数云々ってあるんだけど、
引数を2つ書くとinvalid number of function argumentsっていう
エラーがでてしまって鬱。

25 :
XSLTの仕様を見ていて湧いた素朴な疑問なんですが…
Syntax Summaryの属性で、{}がついてるのとついていないのの
違いって何なのでしょう???
たとえば↓のqnameと{ qname }です
<xsl:apply-templates
select = node-set-expression
mode = qname>
<!-- Content: (xsl:sort | xsl:with-param)* -->
</xsl:apply-templates>
<xsl:attribute
name = { qname }
namespace = { uri-reference }>
<!-- Content: template -->
</xsl:attribute>

26 :
HTMLを出力するXSLTの中にJavaScriptを書いているのですが、
スクリプトの中で、"<"を使うにはどうしたら良いのでしょう?
&gt;や&lt;を使うと、そのまま出力されてしまい実行できません。
<[CDATA[ 〜 ]]>で囲んでも同じ感じです。
アイディアきぼんぬ、です。
可能なところは、!= で逃げているのですが、やはり大小比較は必要なのです。

27 :
>>26 すんまそん。<xsl:text>でできましたでやんす。

28 :
XML+XSLTでSVGを書き出し、Adobe SVGViewerで出力したいのですが
表示できません。

29 :
>>28
XML+XSLT→SVGの変換は何使ってやるの? IEとかmozilaとか?

30 :
あ、ごめんなさい。書き忘れていました。
Apache+Jakarta-tomcat+cocoonです。。

31 :
>>30
image/svg+xmlとして認識されていないのでは?
ていうか認識させられるのかしらん。
(namespaceの指定だけでどうにかできるのかな…ようわからん)

32 :
>>18
<xsl:template match="datalist">
 <table>
  <xsl:for-each select="data">
   <tr>
    <td>
     <xsl:value-of seelct="position()"/>
    </td>
    <td>
     <xsl:value-of seelct="."/>
    </td>
   </tr>
  </xsl:for-each>
 </table>
</xsl:template>

うちのXSLTプロセッサだと >>21 みたいなのは怒られるんだけど
(<tr>と<xsl:if>が対応してないから)、大丈夫なのもあるのかな?



33 :
>>32
> うちのXSLTプロセッサだと >>21 みたいなのは怒られるんだけど
> (<tr>と<xsl:if>が対応してないから)、大丈夫なのもあるのかな?
あるわけないよ。XMLじゃないもん、それ。

34 :
>31
image/svg+xml指定してもだめでした。
なんどやってもAdobeのビューアーで表示できなかったんだけど
荒業でぬけることができました。
xml(+xslt→svg)をsmilのドキュメントに
<img src="target.xml">
という感じでうめこみRealPlayerでsmilを読み込ませると
svgが表示サレマした。うーん‥

35 :
XSLTで遊んでる好例ハケーン→ http://moso.borogrammers.net/newlin/

36 :
<xsl:choose>
 <xsl:when test="...">
  <xsl:variable name="foo" select="..."/>
 </xsl:when>
 <xsl:otherwise>
  <xsl:variable name="foo" select="..."/>
 </xsl:otherwise>
</xsl:choose>
<xsl:value-of select="$foo"/>
で、最後の行、fooなんて変数しらねえYO!と怒られるのが不満なのは漏れだけですか?
xsl:value-of 自体を場合わけすりゃいいのはわかりますけど、なんどもそういう
場合わけをしなければならない場合はウツなんですけども…。
みなさんどうしてるか教えてYO

37 :
あああああ
テンプレート分けて xsl:when 内で xsl:call-template すりゃ済む話か…
ってきます…………

38 :
スレ違い覚悟。
apache + tomcat + 横浜ベイキットCocoon にて XSL:FO 運用を目指してます。
フォント埋め込みになっちゃうんだけど、外字を表示させるにはどうしたらいいんでしょ。

39 :
>>38
横浜ベイキットCocoonってCocoon1のことかなぁ?
ApacheCocoon2なら少しは分かるかも知れんけど
そっちの話でもいい?

40 :
>>39
本当は Cocoon1.82 の話がいいんですが
やり方わかれば Cocoon2 に移行しても問題ないですので
ご教授よろしくお願いします。

41 :
ところで Cocoon2 って日本語対応してるの?

42 :
>>41
対応してるよん。
バージョン2.0.1の時点ではリクエストパラメータの処理に
問題がありますが、2.0.2で改善されます。

>>40
TTEditなんかで作ったフォントを
使いたいということでよろしいかな?

まずFOP単独で出力できないと話が進まないので
FOPの最新版バイナリを落してきてください。
http://xml.apache.org/dist/fop/#


43 :
>>42
まさしくその通りです<TTEdit
一応落として マバイットさんとこみたく インストールしてみました。

44 :
↑当然ながら Cocoon2 最新版までです

45 :
>>44
すでに外字は作成済みですかな?
TTEditの外字作成機能で作ったものではなくて、
UNICODEのE000などの外字領域に直接フォントを作成した
ttfファイルが必要なのですが。

46 :
asd

47 :
TTEditの質問になってしまうかもしれないのですが
Windowsについてくるフォント(MSゴシックとか)だと
外字領域に直接フォント作れるけど
他の市販モノだと「・」となっていじれないんですよねぇ。
そういったプロテクトはずす方法知ってます?

48 :
>>47
外字領域書き込み可能にしたTTEDITで
新規のフォントを作って、
そこに市販のフォントを一括コピーしたら
出来るかも知れんです。
とりあえず入手した
fop-0.20.3-bin.tar.gz
を適当な場所に解凍してください。
OSはLinuxでよいですか?

49 :
>>48
なるほど。
一応 fop解凍しました。
OS は TurboLinuxServer でっす。

50 :
>>49
外字領域に文字を作ったフォントを用意しておいてください。
あとはFOPをインストールしたディレクトリ(fop.shがある場所)に
移動して
java -cp build/fop.sh:lib/xerces-1.2.3.jar org.apache.fop.fonts.apps.TTFReader フォントファイル 出力ファイル.xml
としてやります。
例えばフリーの東風ゴシックを流用して
x-kochi-gothic.ttfというファイルを作ったとします。
/usr/local/fopにfopがあり、
/usr/local/fop/jaにフォントファイルを置いた場合は
次のようにします。
cd /usr/local/fop
java -cp build/fop.jar:lib/xerces-1.2.3.jar org.apache.fop.fonts.apps.TTFReader ja/x-kochi-gothic.ttf ja/x-kochi-gothic.ttf.xml
とりあえず以上の方法で、ちゃんと出力ファイルが出来るか
試してみてください。

51 :
うおー出た出たすげー。
説明ありがとうございます。
これで世間に顔向けできます。

52 :
というわけで、一応出力ファイル
(これがメトリクスファイル?)
が出力されました。
この後は如何に。。。

53 :
>>52
さいです。メトリクスファイルです。
次にFOPの設定ファイルを作ります。
名前は何でもよいですが、例えば
/usr/local/fop/ja/config.xml
のようにするのがよいと思われます。
設定ファイルの内容は以下のようにします。
<configuration>
<fonts>
<font metrics-file="/usr/local/fop/ja/x-kochi-gothic.ttf.xml"
kerning="yes"
embed-file="/usr/local/fop/ja/x-kochi-gothic.ttf">
<font-triplet name="Gothic" style="normal" weight="normal"/>
</font>
</fonts>
</configuration>
この例はx-koichi-gothic.ttfをGothicというフォント名で使えるようにしてます。ttfとメトリクスの名前は実際につかうものに書き換えてください。
次回はいよいよPDFを出力します...

54 :
なるほろ。
コピー&ペーストで設定ファイル作りました。
とうとうPDF出力ですか ニヤリ

55 :
XSL-FOに外字を埋め込む時は、&#を使って文字コードを
UNICODEで指定してやります。
例えばE000に文字を定義したならとします。
次のサンプルをsample.foという名前で保存してください。
で、あとは
./fop.sh -c 設定ファイル FOファイル PDFファイル
としてやればPDFが出てきます。
例えば
./fop.sh -c ja/config.xml sample.fo sample.pdf
として、出てきたPDFをWindowsのアクロバットリーダーで
開いたら、ちゃんと外字が出るはずです。

56 :
<?xml version="1.0" encoding="EUC-JP"?>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master master-name="simple"
page-height="29.7cm"
page-width="21cm"
margin-top="1cm"
margin-bottom="2cm"
margin-left="2.5cm"
margin-right="2.5cm">
<fo:region-body margin-top="3cm"/>
<fo:region-before extent="3cm"/>
<fo:region-after extent="1.5cm"/>
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-name="simple">
<fo:flow flow-name="xsl-region-body">
<fo:block font-size="24pt"
font-family="Mincho">
外字だよん→
</fo:block>
</fo:flow>
</fo:page-sequence>
</fo:root>

57 :
2chだと勝手に文字が変換されるようですな。
外字だよん→・
の部分は
外字だよん→&#xE000
&はもちろん半角ね
です。

58 :
おーおー
確かにPDF出力できました。
さて、次は Cocoon2 連携ですな。

59 :
3/25にリリースされたCocoon2.0.2を試してみましたが、
Cocoonのバグのためにフォントが設定できませんでした。
今、修正版を準備してます。
明日にでもうpするので、しばし待ってください。
60 :
あぼーん

61 :
とりあえずうpしたので
下の物を落としてきてください
http://218.130.228.56:4040/c2.tgz

62 :
落とすは落としました。
単に解凍すればいいのかな?

63 :
とりあえず、
まだ入れてなければJDK1.4とTomcat4.0.3LEを
入れておいてください。

64 :
tomcat は 3.x ではなく 4.x なんですね。
了解しました。

65 :
JDK1.4でCocoon2を使えますか?
Cocoon2のソース取って来てビルドかけても
ビルド通らないんで、妥協してJDK1.3使ってるんですが。

66 :
以下のJDK1.4対応版Tomcatで動作を確認してます。
http://jakarta.apache.org/builds/jakarta-tomcat-4.0/release/v4.0.3/bin/jakarta-tomcat-4.0.3-LE-jdk14.tar.gz
Cocoonはバイナリ版でも動きました。
tomcatを/usr/localあたりに解凍して、
c2.tgzを展開したら出てくるc2フォルダを
tomcatのwebappフォルダの中に置いてください。
さらに、c2/WEB-INF/lib/batik-all-1.5b1.jarを
tomcatのcommon/libにコピーしてください
tomcatの起動はXWindow内でするか、
Xvfb使ってください。
これでhttp://localhost:8080/c2/
にアクセスできるはずです。

67 :
どうも、65です。
LE板じゃないtomcat使ってたのが動かない原因でした。
失礼しました。

68 :
かちゅ〜しゃであぼーんされたと表示されたので
最後の最後でとがっかりしてましたが、ブラウザで
見たら、最終動作確認まで書き込みされていてほっとしました。

早速試してみます。

69 :
中途半端な手続き言語XSLTはいらん
仕様から廃止しろ

70 :
ってか、
apache1.24 + tomcat3.2.4 + cocoon2.0.2 の
インストールがうまくいかん!
どうして tomcat 立ち上げると core 吐いて落ちるんじゃー

71 :
↑いやん
× 1.24
○ 1.3.24

72 :
XSLTで複数のキーについてソートしたい場合はどうすればいいのでしょうか?
SQLだと、
select foo, bar from tee order by foo, bar
というように書けますけど、XSLTだと可能なのでしょうか?

73 :
>72
<xsl:sort select="foo"/>
<xsl:sort select="bar"/>
でできました。

74 :
もういいかげん、XSL と XSLT をいっしょに扱うことに無理がある
XSLT は XTransform とかに改名すれ

75 :
COCOON2にて日本語を利用可にする
設定方法、設定ファイル等
教えてください。

76 :
COCOON2にてXSPを利用しようと思います。

ここで自分で作成したCLASSにCLASSPATHを通すには
どうしたらよいのでしょうか?

XSPのコンパイルの時点でjava.lang.NoClassDefFoundError
となります。

sitemap.xmapなのかcocoon.xconfなのかわかりません。


77 :
>>75
こちらでは問題ないがOSは何だ? あとGeneratorやTransformerは
何を使ってるんだ?
>>76
/Tomcat/webapps/cocoon/WEB-INF/classesに置くのは駄目なのか?

78 :
>>75
http://www.emergence.jp/mail-archive/ci/index.cgi?mss:54:200205:dmoeikbhogokbpdjofji
ではどうだ?

79 :
http://www.ascii.co.jp/books/detail/4-7561/4-7561-4065-3.html
この本はどうですか?
値段が高いので迷っています。

80 :
勉強不足ですいません。
OSは、Redhat7.2です。
Generator,Transformerについては、
勉強不足で知らないのですが、
sitemap.xmapの内容でしたら、
Generator:JspGenerator
Transformer:TraxTransformer
となっております。
見当違いでしたらすいません。

81 :
>>80
JSPを使っているのであれば、単純に普通のTomcatでそのJSPファイルを
指定したときに、文字化けは起こってないか? JSPの中でのエンコーディングの
指定がまずいような気がするが。
もし上記でJSPファイルの問題でないのなら、普通にXMLファイルを作ってみて、
SitemapでFileGeneratorに指定してあげてそちらだと文字化けが起こるかどうかを
確認してみてくれ。
それと、そもそも文字化けを確認しているブラウザもRedhat上かな?

82 :
>>76
TOMCAT_HOME/webapps/cocoon/WEB-INF/web.xml
を触ればよい。
<init-param>
<param-name>extra-classpath</param-name>
<param-value>ここで指定する</param-value>
</init-param>

83 :
>TOMCAT_HOME/webapps/cocoon/WEB-INF/web.xml
>を触ればよい。
><init-param>
><param-name>extra-classpath</param-name>
><param-value>ここで指定する</param-value>
></init-param>

上記の設定ファイルを指定したら
XSPのコンパイルエラーなくなりました。

本当にありがとうございました。


84 :
あぼーん

85 :
21は33の言うとおり。
試してもいない21のコードに
9も試してもいないのに感謝する必要はない。
で,結局
</tr><tr>
は,
<xsl:text disable-output-escaping="yes"></tr><tr></xsl:text>
とすればOK。

86 :
ちぇっ,展開されちった。
めんどいから全角で書くよ。
85のは
<xsl:text disable-output-escaping="yes">&lt;/tr&gt;&lt;tr&gt;</xsl:text>
ということね。

87 :
普通のレンタルサーバとかでサーバサイドのXSLT変換ってできる?

88 :
>>87
Perl使ってるんならこことか見てみたらどうかな。
http://www-6.ibm.com/jp/developerworks/xml/j_perl-xml-toolkit.html

89 :
>86
<element name="tr" />
ではあかんか?

90 :
>>9
<xsl:template match="/">
<table>
<xsl:for-each select="datalist/data">
<xsl:if test="position() mod 3 = 1">
<tr>
<xsl:for-each select=".|following-sibling::data[position() &lt; 3]">
<td><xsl:value-of select="."/></td>
</xsl:for-each>
</tr>
</xsl:if>
</xsl:for-each>
</table>
</xsl:template>

91 :
<xsl:apply-templates select="foo">
<xsl:sort select="a" data-type="text" order="ascending" />
</xsl:apply-templates>
でソートした結果をテンプレート処理しているのですが、
<xsl:template match="foo">
この中で処理される「foo」の前に処理された
「foo」の子要素を参照する事はできないのでしょうか?
<xsl:template>
アドバイスいただけませんでしょうか。

92 :
<xsl:value-of select="preceding-sibling::foo[1]/a"/>
とかじゃだめなの。
というかもう少し具体的に。

93 :
173 :参加するカモさん :02/03/12 09:46
みんなメルマガ読んでる?
あれ読むとひろゆきの性格よくわかるよ
すっごい陰湿。
根暗。
正直、引くよ。2chの管理人って、こういう奴なのかって。
176:参加するカモさん :02/03/12 11:18
ひろゆきのの報告の仕方はよくわかったけど、たまには相手側の言い分も聞いてみたいね
まったく違う状況だったりしてw
177:参加するカモさん :02/03/12 11:42
ひろゆきさんっては自分の都合の良いことしか報告しないし、都合が悪くなると
報告しなくなっちゃうんだよね、、
それにしてもひろゆきさんてば見事に陰湿な文章書くなあ。。

94 :
>>92
うまく質問できていないみたいですいません。
<doc>
 <foo>
  <a>あ</a>
  <b>111<b>
 </foo>
 <foo>
  <a>あ</a>
  <b>123<b>
 </foo>
 <foo>
  <a>い</a>
  <b>324<b>
 </foo>
 ・
 ・
 ・
</doc>
というようなXMLをXSLでHTML変換する際に
foo/aの値でfooをソートして出力します。
その際aの値が「あ」から「い」に変わる時だけ
例えば<hr>を挿入したいと思っています。
使用しているのはIE6です。
ちょっとまだ良く分かってないところが多いので
うまく説明できてないかもしれませんが。
先ほど教えていただいた
<xsl:value-of select="preceding-sibling::foo[1]/a"/>
はエラーになってしまいます。(エラー自体が文字化け)
長くなってすいません。

95 :
こうかな、、

<?xml version="1.0" encoding="Shift_JIS"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

<xsl:key name="group" match="doc/foo" use="a" />

<xsl:template match="/">
<html><body><xsl:apply-templates/></body></html>
</xsl:template>

<xsl:template match="doc">
<xsl:for-each select="foo[count(. | key('group', a)[1]) = 1]">
<xsl:sort select="a" data-type="text" order="ascending"/>
<xsl:for-each select="key('group', a)">
<xsl:value-of select="a" />
<xsl:value-of select="b" />
<br />
</xsl:for-each>
<hr/>
</xsl:for-each>
</xsl:template>

</xsl:stylesheet>

96 :
アドバイスありがとうございます。
そのままコピペしてテストしてみましたが、
foo[count(. | key('group', a)[1]) = 1]
でエラーがでてしまいました。
<xsl:for-each select="foo">
だとkey()で取得したノードリストが、複数でてしまいますし。
xsl:keyとkey関数を知らなかったので勉強になりました。
ちょっとこのアドバイスを元に考えてみます。
ほんとにありがとうございます!

97 :
XSLTってXSLの鬼っ子でしょ?
とっとと改名しる!

98 :
なんだか難しそうだな

99 :
Cocoon2でXSPを使ってHTMLを出力するとなぜか文字化けしちゃう。
XSPの出力エンコーディング設定ってどこですればいいんでしょうか?


100read 1read
1read 100read
TOP カテ一覧 スレ一覧 2ch元 削除依頼
・ 次のスレ
37: アプリケーションサーバって必要? (206)
38: i-2chをEZwebでも正常に見れるように (93)
39: PHPを教えることになりました (83)
40:     【大人のCGIスクリプト】買った?     (69)