XSL/XSLT
■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。
01/09/05 10:49ID:dYMWGvtU0356nobodyさん
2005/09/04(日) 10:59:31ID:???をxsl:stylesheetの直下に入れる、かな。
XHTMLでないHTMLとして出力されていると思われ。
0357初心者
2005/09/05(月) 02:29:25ID:???どうもありがとうございます。
おっしゃる通りの方法でできました。
ただ、新しい問題が発生しました。
お付き合いいただけましたら嬉しいです。
xslt で出力される html は単独の html ではなく
ある html ファイルの <body> 内に include させたいと考えています。
今までは <xsl:output method="html" /> としていて、問題はありませんでしたが
<xsl:output method="xml" /> や <xsl:output method="xhtml" /> にすることにより
xslt によって出力される html の1行目には <?xml version="1.0" encoding="UTF-8"?>
が入ってしまうようになってしまいました。
つまり、<body> 内に <?xml version="1.0" encoding="UTF-8"?> が入ってしまいます。
文法的には問題ないようですが、なんだか気持ち悪いです。
xhtml や xml で出力するのではなく、text みたいな形で出力した方が適当でしょうか?
0358初心者
2005/09/05(月) 02:47:17ID:???ググったら見つけました。
<xsl:output method="xml" omit-xml-declaration="yes" /> とすると、XML 宣言をしないようにできるようですが
実際には出力されてしまいます。
なにかおかしいですかね?
0359nobodyさん
2005/09/10(土) 01:33:29ID:???alt="{$変数名}"
とは書かないの?
call-templateする予定があるとか??
あと最初以外にXML宣言入るのは文法の問題あるよ。
ただUAが無視してくれているだけだけど。
0360nobodyさん
2005/09/29(木) 03:07:41ID:???どなたかXSLT2.0の話でも…
0361nobodyさん
2005/09/29(木) 11:45:59ID:???http://xsieve.sourceforge.net/
0362nobodyさん
2005/10/01(土) 21:07:44ID:???何故かVersion=2005-09-15だと、StyleにXSLファイル指定してもうまくいきません。
AWSでXSLやるときの条件みたいなものって何かありますか?
0363nobodyさん
2005/10/04(火) 17:41:50ID:otfuFaaW仕様書をみたけど、それらしい機能が見つかりませんでした。
0364nobodyさん
2005/10/04(火) 21:01:50ID:???0365nobodyさん
2005/10/04(火) 21:53:53ID:otfuFaaWありがとう。スタイルシートの取り込みってあったから、てっきりCSSのことだと思ってた。
XSLTファイルじたいがスタイルシートなのね。べんきょうになりますた。
0366nobodyさん
2005/10/15(土) 16:29:33ID:dOz9BDB0DBから取得したデータをXMLに出力し、それをXSLTでXSLに変換かけたいと思ってます。
そこで下記のコードなんですが
<A>
<B key="test1" value="aaa1" />
<B key="test2" value="aaa2" />
</A>
<C>
<D value="" />
</C>
Dのvalueの値にBのvalueの値を入れたいと思ってます。
イメージ的には、/D/@value = /B/key["test"]@value ?? なんですが、/A/B[1]/@valueのように
番号ではなくkeyの名前で参照するにはどうやればよいのでしょうか。
0367サッカー少年大好き
2005/10/15(土) 17:00:04ID:???でいけると思われ。
(child::は省略可、attribute::は@に置換可)
結論を言うと、XPathの勉強をおすすめする。
0368訂正
2005/10/15(土) 17:04:51ID:???strにはkeyの値を入れるんだよ。
0369nobodyさん
2005/10/15(土) 21:29:57ID:???本来なら勉強しなきゃいけないんですが、助かりました。
0370nobodyさん
2005/10/17(月) 19:35:15ID:SiiJse0Yhttp://www.wakkaya.com/test/a.xmlと
http://www.wakkaya.com/test/a.xslです。
まず、
<data><a>あああ2003</a><b>21</b></data>
<data><a>あああ2004</a><b>30</b></data>
<data><a>あああ2005</a><b>14</b></data>
<data><a>いいい2003</a><b>30</b></data>
<data><a>いいい2004</a><b>45</b></data>
<data><a>いいい2005</a><b>80</b></data>
<data><a>ううう2003</a><b>99</b></data>
<data><a>ううう2004</a><b>77</b></data>
<data><a>ううう2005</a><b>46</b></data>
という感じのxmlがあります。
<a>に2005が含まれている箇所だけ抽出し、
<b>の大きい順に並べ替えるようにしてから番号を振るようにします。書くと
<xsl:sort select="b" order="descending" data-type="number" />
<xsl:if test="contains(a, '2005')">
<tr>
<td><xsl:number value="position()" /></td>
<td><xsl:value-of select="a" /></td>
<td><xsl:value-of select="b" /></td>
</tr>
</xsl:if>
という感じです。いざxmlを見てみると番号が1、2、3とならずに
2、4、9となるのです。どうやれば1、2、3と表示されますか?
どなたかご教授下さい。何卒宜しくお願い致します。
0371nobodyさん
2005/10/17(月) 20:58:48ID:???<xsl:for-each select="data[contains(a, '2005')]">
<xsl:sort select="b" order="descending" data-type="number" />
<tr>
<td><xsl:number value="position()" /></td>
<td><xsl:value-of select="a" /></td>
<td><xsl:value-of select="b" /></td>
</tr>
</xsl:for-each>
0373370
2005/10/18(火) 08:05:21ID:???http://www.wakkaya.com/test/a.xmlと
http://www.wakkaya.com/test/a.xslです。
今度は、<b>の中身が空の場合は表示しないようにしたいのです。
<xsl:choose>
<xsl:when test="b=''">
</xsl:when>
<xsl:otherwise>
<xsl:for-each select="data[contains(a,'2005')]">
<xsl:sort select="a" order="acsending" data-type="text" />
<tr>
<td><xsl:number value="position()" /></td>
<td><xsl:value-of select="a" /></td>
<td><xsl:value-of select="b" /></td>
</tr>
</xsl:for-each>
</xsl:otherwise>
</xsl:choose>
と、<a>順で並べ替えるようにしたのですが、しっかり空の要素も表示されてしまいます。
ちなみに、xsl:for-each 以下に xsl:choose を入れると、例のごとく番号が2から始まります。
対処法をお教え頂けませんでしょうか?本当に度々ですみません。
0374nobodyさん
2005/10/18(火) 12:21:24ID:???とか書くと相手にされない件
0375nobodyさん
2005/10/18(火) 16:18:41ID:EpeUQJeg「x=x+1」のような
インクリメントってできないの?
0378nobodyさん
2005/10/19(水) 15:52:23ID:HblKNOzDすみません。気を付けます。
>>376
アドバイスあるが等御座います。
もすこしfor-each やifやwhen勉強して出直してきます・・・
0379nobodyさん
2005/10/19(水) 16:32:01ID:???0380nobodyさん
2005/10/20(木) 13:50:48ID:???仰せの通りXPathについていろいろ調べたことろ、
<xsl:for-each select="data[contains(name, '3') and uriage > 0 ]">
とするだけでNaNをはじくことが出来ました。
なんか凄い初歩的で恥ずかしい質問であるにもかかわらずお答え下さった皆様方、
この度は誠に有り難う御座います。
これを機会にXPathを精進・・
0382nobodyさん
2005/10/22(土) 20:01:27ID:???0383nobodyさん
2005/10/23(日) 01:17:07ID:???0385nobodyさん
2005/10/24(月) 09:48:44ID:3//Wc9qN0386nobodyさん
2005/11/11(金) 13:59:20ID:nEB8ZVf7http://www.atmarkit.co.jp/fxml/tecs/006stylelink/06.html
を試してみようと思いましたが
http://sb.xrea.com/showthread.php?t=5996&highlight=xsl
どう見ても無理です。
本当にありがとうございました
0388nobodyさん
2005/11/11(金) 14:10:06ID:???0389nobodyさん
2005/11/11(金) 20:58:02ID:???0390nobodyさん
2005/11/17(木) 02:28:40ID:???早めに勉強しましょう。
0392nobodyさん
2005/11/18(金) 17:50:43ID:???0393nobodyさん
2005/12/13(火) 01:57:44ID:???数ヶ月ぶりに自己レス
/[local-name()="root" and namespace-uri()="http://example.com"]/item1
でどうだろう?
0394nobodyさん
2005/12/14(水) 09:14:43ID:???いや、だから>>345がスタイルシートの中でURIが一緒な
任意のプリフィクスを付けろとアドバイスしてるだろう。
なんでそんな面倒なことするの。しかも間違ってるし。
0396nobodyさん
2005/12/15(木) 20:20:47ID:???XPath式にてdefault namespaceを指定しようとしたら、
nullなnamespaceになるのをならないと勘違いしていた。
とりあえずXPath式内でdefault namespaceのnodesを指定したければ
default namespaceのURIを別のprefixにも指定すればOKだと思う.
(XMLでは一つのURIを複数のprefixに充ててはいけないルールは無い)
まあこんなnullpoな俺だがcandidateなXPath2.0のspecificationをプリントして見てます。
今のところlearnした事柄:
・やっぱり名前空間の仕組みはアレだからdeprecateらしい
・型についての概念が出てくる。XML Schemaの知識が必要。
・XPath2.0はXPath1.0のスーパーセットだお。つまり1.0の式が2.0でも通用するお。
・2.0は少なくともXSLT2.0とXQuery1.0で使用されるお。
・シーケンスっつーのはアイテムたちの順序ある並びだお
・アイテムというのはノードと、リテラルチックな”値”のことだお
もっとセンセーショナルな事実が解ったらまたカキコするお。
でも駄目人間の俺より仕様書を信用するべきだお。
またもや携帯からの書き込みだから妙なことになってるかもしらん。
バイバイ
0397nobodyさん
2006/03/04(土) 02:07:19ID:c1CTCPapXSLT(XPath)で、Textや属性のQNameってどうやって調べれば良いんでしょうか?
例えば、
<ns0:boards xmlns:ns0="http://2ch.net">
<board nick="ns0:webprog"/>
<board nick="ns0:tech"/>
<board nick="ns0:unix"/>
</ns0:boards>
で、
「値が、名前空間が"http://2ch.net"でローカル名が"webprog"の値を持つboard要素」って、
どうやって調べればよいのか…。
全然知らないんですがXPath1.0じゃだめでXPath2.0の●●じゃないと無理とかあるんでしょうか。
0398nobodyさん
2006/03/04(土) 02:08:42ID:???×「値が、…
○「属性値が、…
0400nobodyさん
2006/03/04(土) 09:38:14ID:???詞ね
<xsl:template match="/boards/board[@nick=concat(name(namespace::*[.='http://2ch.net']),':webprog')]">
<xsl:value-of select="@nick"/>
</xsl:template>
0401nobodyさん
2006/03/04(土) 09:45:21ID:???0402nobodyさん
2006/03/04(土) 12:59:39ID:???ありがとうございます。
頂いた答えをヒントにして、苦節1時間、やっと出来ました。
<xsl:template select="/ns0:boards/board/@nick[../namespace::*[local-name(.)=substring-before(string(../@nick),':')] and substring-after(.,':')='webprog']">
<xsl:value-of select="."/>
</xsl:template>
しかし、なんでこんな普通の選択のためにゴリゴリ書くんでしょう…。
>>399が言ってることがまっとうで、
XSLT/XPath/XMLSchema?の仕様の方が逝かれてるのではないか、という気がしてきます…。
0403nobodyさん
2006/03/04(土) 13:01:00ID:c1CTCPapXMLSchemaではQNameという型があります。>>397のnickのように使われます。
よく?使われる例は、
<hoge xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<value xsi:type="xsd:string">123456789</value>
</hoge>
だと、/hoge/value の値は、文字列”123456789”で、
<hoge xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<value xsi:type="xsd:int">123456789</value>
</hoge>
だと、/hoge/value の値は、32bit整数 123456789 で、
<hoge xmlns:tns="http://www.2ch.net" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<value xsi:type="tns:code">123456789</value>
</hoge>
だと、/hoge/value の値は、名前空間http://www.2ch.netで定義されたcode型の123456789、
なんて事になります。
でも、その直感はあながち間違いでもないように思えるのは、>>402に書いたとおりです。
0404nobodyさん
2006/03/04(土) 19:16:02ID:???よっぽどのアホがこんな仕様作ったんだろう。
0405nobodyさん
2006/03/05(日) 07:39:58ID:???なるほど、スキーマで使うのか
ボヘミアンな俺には縁が無さそうだが、
一つ勉強になった
でもよ、データ型が必要なら、それを前提としたもの、
例えば、XPath1.0より2.0を使った方がいいんじゃね?
貴族がボヘミアンを振る舞えったって、やっぱりぎこちないだろ
0406nobodyさん
2006/03/05(日) 14:59:23ID:noB5/pArQNameの例としてxsi:typeの例を挙げたのが誤解されたかもしれんが。
http://pc8.2ch.net/test/read.cgi/tech/1133280488/108
XPath2.0だと
http://pc8.2ch.net/test/read.cgi/tech/1133280488/105
みたいに簡潔に書けるの?
0407nobodyさん
2006/03/05(日) 20:28:28ID:???2.0は型情報を前提としている貴族主義だから、QName型ならQName型で処理できるんじゃないかな。
...と言いつつ、俺もよく分からん。
でも、XSLT・XPath1.0ってのは「シンプル・イズ・ベスト」を信仰するボヘミアン派だから、
如何せんXMLSchemaとは相性が良くないと思う。
0408nobodyさん
2006/03/07(火) 00:42:38ID:s8zBddvo0409nobodyさん
2006/03/07(火) 06:40:25ID:???0410nobodyさん
2006/03/07(火) 08:07:09ID:???0411nobodyさん
2006/03/07(火) 08:36:15ID:???0412nobodyさん
2006/03/07(火) 20:15:46ID:???0413nobodyさん
2006/03/09(木) 23:33:25ID:dDByu5bB0414nobodyさん
2006/03/10(金) 10:59:20ID:???510件という数字は多いのか?少ないのか?
Googleまで持ち出して何が言いたいんだ?
……という風に突っ込まれたくなければ意図不明瞭な一行レスをやめろ。
0415nobodyさん
2006/03/10(金) 11:15:50ID:???そしてスルーしてやりなよ
0416nobodyさん
2006/03/10(金) 11:27:58ID:???オイラはどうしても「型情報」って奴についてけねえだけどな。
DTD+DateTypeで十分だと思うがな...
0417nobodyさん
2006/03/10(金) 22:11:55ID:???0418nobodyさん
2006/03/18(土) 20:53:13ID:eqYBhKgIRSS1.0はとりあえず表示できたのですが、RSS2.0が全然ダメです
XSLTファイルのRSS2.0を表示させるソースってどこか公開されていませんか?
0419418
2006/03/18(土) 21:50:23ID:???0420nobodyさん
2006/03/26(日) 05:28:41ID:96nmrOTOIE5.x の頃だったかは
http://www.microsoft.com/downloads/details.aspx?FamilyID=d23c1d2c-1571-4d61-bda8-adf9f6849df9&DisplayLang=en
入れればバリデーションと結果のソース表示も出来たんだが、IE6 になって
から出来なくなったのかな?
0421nobodyさん
2006/03/29(水) 11:37:28ID:Bmnd//MPとある場合、特定の処理を @count 回ループさせたいんですがどうすれば良いんでしょうか?
ループカウンタ付きのループ for(i=0; i<@count; i++) みたいな感じなんですけど、<xsl:for-each> じゃ
要素とかの集合しか指定できないですよね?
0423nobodyさん
2006/03/29(水) 19:18:29ID:Bmnd//MP0424nobodyさん
2006/03/29(水) 23:46:49ID:???むしろ再帰の方が自然なんだな
0426nobodyさん
2006/03/32(土) 21:43:59ID:rvS9DXBcウェブプログラミングにxsltって有効?
0427nobodyさん
2006/04/02(日) 01:48:27ID:???静的な部分は XSL で、動的な部分は XML で作れるならデータ転送量を
最小限に押さえられるので有効だと思う。サーバの負荷分散にもなるし。
ただ未対応ブラウザに対応するなら逆に高くなるかもしれん。
0428nobodyさん
2006/04/03(月) 20:37:14ID:???クライアントサイドの一般的なパーサは対応しているのでしょうか?
処理としては要素の日付と本日の日付を比較して過去の情報は隠すという動きをさせたいです。
exsltが無理ならスクリプトでやってみます。
0429nobodyさん
2006/04/06(木) 09:20:31ID:???クライアントサイドの一般的なパーサって、どんなん?
IEやMozillaに付いてくような奴だったら駄目じゃね?
0431nobodyさん
2006/04/06(木) 20:45:52ID:???0432nobodyさん
2006/04/07(金) 20:37:45ID:???0433nobodyさん
2006/04/07(金) 20:38:28ID:ds66Zruv0434nobodyさん
2006/04/08(土) 01:20:46ID:???ここを見て、copyなら©, nbspなら と書くのが単純。
0435nobodyさん
2006/04/08(土) 01:25:53ID:???0436nobodyさん
2006/04/09(日) 17:43:31ID:???0437nobodyさん
2006/04/11(火) 14:38:23ID:???一般ユーザ用と管理者用で XSL を分けてたんだが、2〜3 のパラメータと条件分岐だけで
統合できそうなのが分かってきた。ただ一般ユーザには管理者用の XSL を見せたくないし。
0438nobodyさん
2006/04/11(火) 20:50:36ID:???0439nobodyさん
2006/04/19(水) 04:15:41ID:???0440nobodyさん
2006/04/19(水) 19:35:12ID:???0441nobodyさん
2006/04/19(水) 20:30:42ID:???0442nobodyさん
2006/04/21(金) 07:18:54ID:???利かないみたいなんですけど何か振替策ないでしょうか?
0443nobodyさん
2006/04/21(金) 07:52:16ID:???Mozilla 開発者連中は W3C の解釈だとか何とか言い訳付けて修正しないそうです (なんだそりゃ)。
結局の所、中で 2 回パースしてる部分が遅くなるだとか、XML+XSLで生成した HTML が Valid で
あるという前提で設計しちゃったので手を入れたくないとかってのが本音っぽい。
ふと思いついて JavaScript で innerHTML に設定してみたらとりあえず回避できたっぽいのでご報告まで。
<xsl:value-of select="foo" disable-output-escaping="yes" />
↓
<input type="hidden" name="" id="foo" value="{foo}" />
<span id="bar"></span>
<script language="javascript">
document.getElementById("bar").innerHTML = document.getElementById("foo").value;
</script>
0444nobodyさん
2006/06/02(金) 14:43:12ID:H6C73k2sループを回し表を作成したときに、1行毎に指定された内容をセットしてmailを送りたいのですが上手くいきません。
以下はループの内部処理です。
・$q_indexには表の登録番号(行番号)がセットされています。
・メールのテンプレートをjavaScriptで作成しています。
<xsl:variable name="url_id">url_<xsl:value-of select="$q_index"/></xsl:variable>
<A target="_blank" href="" id="$url_id" charset="">メール送信</A>
<script lang="javaScript">
$url_id.href='mailto:[email protected]?subject=' + [行毎に定義されたmailテンプレ];
</script>
最初は上記のように書いていました。
これで表を作ると、1件目はメールを送れたのですが、2件目以降メーラーが開かないというバグが発生してしまいました。
理由は<A>タグで定義してるIDパラメータが"$url_id"という文字列で固定されていた為です。
2件目以降も同じ名前が定義されている為エラーになっているようでした。
そこで下のように改造を試みたのですが、ここで問題が発生しました。
<xsl:variable name="url_id">url_<xsl:value-of select="$q_index"/></xsl:variable>
<A target="_blank" href="" id="<xsl:value-of select="$url_id"/>" charset="">メール送信</A>
<script lang="javaScript">
<xsl:value-of select="$url_id"/>.href='mailto:[email protected]?subject=' + [行毎に定義されたメールテンプレ];
</script>
この様にした場合、<A>タグのIDパラメータが不正となってしまいます。
お聞きしたいのは、<A>タグのIDパラメータに変数$url_idを定義したいのです。
どなたか上手い方法をご存知無いでしょうか?
0445nobodyさん
2006/06/02(金) 15:00:49ID:H6C73k2s直接変数内のデータを参照したい場合、{}で括ればいいらしいようです。
<xsl:variable name="url_id">url_<xsl:value-of select="$q_index"/></xsl:variable>
<A target="_blank" href="" id="{$url_id}" charset="">メール送信</A>
<script lang="javaScript">
<xsl:value-of select="$url_id"/>.href='mailto:[email protected]?subject=' + [行毎に定義されたメールテンプレ];
</script>
0446nobodyさん
2006/06/06(火) 05:01:30ID:???どうすればいいの?
0447nobodyさん
2006/06/06(火) 19:27:27ID:???<![CDATA$]]>
0448nobodyさん
2006/06/06(火) 19:27:57ID:???0450nobodyさん
2006/06/06(火) 20:47:00ID:???- <Arguments>
<Argument Name="AssociateTag" Value="sfeesv-22" />
<Argument Name="ItemPage" Value="1" />
<Argument Name="SubscriptionId" Value="0QRaadwa2" />
<Argument Name="Keywords" Value="ハリーポッター" />
<Argument Name="ResponseGroup" Value="Request,ItemIds,OfferFull,VariationSummary,ItemAttributes,EditorialReview,Images,Reviews" />
<Argument Name="Operation" Value="ItemSearch" />
<Argument Name="Service" Value="AWSECommerceService" />
<Argument Name="SearchIndex" Value="Electronics" />
<Argument Name="Sort" Value="salesrank" />
</Arguments>
コレをxsltのfor-each分で値を返します。Argumentだけを抜き出します。
-----
<xsl:for-each select="aws:Argument">
<xsl:value-of select="@Name"/>
<xsl:value-of select="@Value"/>
</xsl:for-each>
-----
値がずらずらっと返ってきました。ここで<Argument Name="ItemPage" Value="1" />の部分だけ値を返したくないのですが、xsltにどのように書き加えればいいのでしょうか?
0451nobodyさん
2006/06/06(火) 21:24:43ID:???0452nobodyさん
2006/06/06(火) 21:25:20ID:???0454nobodyさん
2006/06/15(木) 17:44:27ID:bh/U7SORXSLTに<xsl:output method='xml' encoding='SHIFT_JIS'/>
みたいな感じで書いているのに
出力されるXML宣言が<?xml version="1.0" encoding="UTF-16"?>
と出力されるのは何ででしょうか?
ちなみにXMLファイルの変換には
VS2005VC++でIXMLDOMDocumentPtrのtransformNode()を使用しています。
0455nobodyさん
2006/07/10(月) 11:50:48ID:AyMgINi+それに CSS を適用して見せるページを作っています。
意図するように見えているのですが、
Firefox がどのような HTML に変換しているのかを
確認したいと思っています。
Firefox で XSL による変換結果をファイルに
保存することってできますか?
つまり XSL 適用後の文書を保存したい、
Firefox を単に XSL プロセッサとして使いたいのです。
■ このスレッドは過去ログ倉庫に格納されています