XSL/XSLT
■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。
01/09/05 10:49ID:dYMWGvtU0396nobodyさん
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 プロセッサとして使いたいのです。
0456nobodyさん
2006/07/11(火) 17:58:57ID:Wcdm37qK<?xml-stylesheet title="XSL_formatting" type="text/xsl"
href="http://resource.example.com/sample.xsl" ?>
XML プロセッサとして Firefox を利用すると、
XML ファイルをおいてある場所以外の XSL ファイルを
指定した場合に「Security Error」になります。
これはいかんともしがたいのでしょうか?
0457nobodyさん
2006/07/11(火) 18:20:50ID:???セキュリティ上、別ドメインからのスクリプトの呼び出しはダメとかじゃなくて?
0458nobodyさん
2006/07/11(火) 18:24:23ID:Wcdm37qKmay not load data from http://orz.2ch.net/test.xsl
表示内容は上記の通りです。スクリプトと同じで他のドメイン
からの XSL ファイルは信用しないよってことですか。
全部ローカルにおいてたら Gecko でも IE でも処理
できるファイル群なので、ファイルの内容自体に誤りはないと思います。
0459nobodyさん
2006/07/11(火) 18:38:12ID:???0460456=458
2006/07/11(火) 18:38:47ID:Wcdm37qK登録することで、他のサイトの XSL ファイルも
ダウンロードして処理してくれるようになりました。
Firefox ではそれに対応する設定を見つけられませんでした。
身内で共通の CSS とか XSL 使おうと思ってて
どうせ内容いじれるのが自分だけなんで一カ所に
集めちゃおうと思ったんですが、セキュリティの
こと考えたらなんか根本的に間違ってた気がするので
あきらめます。
0461nobodyさん
2006/07/11(火) 20:19:18ID:Wcdm37qK「ルート直下の a または b という要素の下にある c という要素」
に関するテンプレートを書きたい時って、
/a/c に対するものと /b/c に対するものを別に
書く必要がありますか?まとめて /{a|b}/c のように記述
する方法はありませんでしょうか?
0462nobodyさん
2006/07/11(火) 20:46:36ID:???0463nobodyさん
2006/07/12(水) 09:47:10ID:CjrVtdTv<Argument Name="Service" Value="" />
<Argument Name="AssociateTag" Value="test" />
<Argument Name="ItemPage" Value="1" />
</Arguments>
xsl:value-of selectを使って、testの値だけ抜き出したいのですが、
どのように書けばいいんでしょうか?
0464nobodyさん
2006/07/12(水) 11:36:40ID:???Arguments/Argument[@Name='AssociateTag']/@Value
入門書くらい買え
ちがってたらゴメンネ
0465nobodyさん
2006/07/13(木) 16:00:41ID:Lxav0c83どうもありがとうございます。
うまくいきました!
0466nobodyさん
2006/07/13(木) 17:27:49ID:Lxav0c830467nobodyさん
2006/07/13(木) 18:25:06ID:???わからなかったら聞いてみよう!
わかったことはみんなに知らせよう!
いけ!
0468nobodyさん
2006/07/14(金) 20:02:42ID:BpYZj7V/ところで
<xsl:for-each select="document('http://test.xml')
見たいにurlを入力したとき、urlに=だとか&だとかが入っているとエラーが出てしまいます。
どうやって書けばいいんでしょうか?
0469nobodyさん
2006/07/14(金) 21:29:08ID:MY15XHq0=はそのままでよかった気がする。
ttp://www.ne.jp/asahi/minazuki/bakera/html/reference/charref
0470nobodyさん
2006/07/14(金) 21:30:47ID:???示したURLのページをもとにがんばってくれ。
0471nobodyさん
2006/07/14(金) 23:47:41ID:BpYZj7V/ありがとうございます
0472nobodyさん
2006/07/22(土) 10:37:07ID:???検索して結果を表示するようなことは、xslのみで実現するのは可能でしょうか?
postができなそうなのでやっぱり不可能でしょうか?
0473nobodyさん
2006/07/23(日) 00:28:31ID:???0475472
2006/07/23(日) 09:47:44ID:???やっぱそうなりますよね。
xml文章中の特定の語句を検索して表示するような、
スクリプトが紹介されていたので、
postができれば検索システムも作れるそうだなと思った次第です。
>>473
xslって簡易プログラミング言語みたいなものだと思っていたので、
変な言い方だったらすみません。
0476nobodyさん
2006/07/24(月) 14:48:21ID:uSZzoH8+どんなのがありますか?
0477nobodyさん
2006/07/25(火) 01:05:04ID:???xsl:if の test 部分をpostされたデータにすれば出来そうな気がする
0478nobodyさん
2006/08/02(水) 19:55:15ID:qF5sPr3L<xsl:variable name="●●">○○.xml</xsl:variable>
<xsl:for-each select="document($●●)/▲▲/■■">
</xsl:for-each>
こんな感じで入力すると、$●●に○○.xmlが入らずに
$●●のままなんですが・・・
0479nobodyさん
2006/08/02(水) 20:13:17ID:qF5sPr3Lすいません自己解決しました。
0481nobodyさん
2006/08/17(木) 06:59:21ID:???加えたいのですが、それ以外の要素を無変換で出す処理はどう書けば良いの
でしょうか? 例えば XML 中の password という要素の内容をマスクする場合:
<xsl:template match="/">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="*">
<xsl:choose>
<xsl:when test="name(.)='password'">
<password>****</password>
</xsl:when>
<xsl:otherwise>
<xsl:element name="(ここはどうすれば?)">
<xsl:for-each select="@*">
<xsl:attribute name="(ここはどうすれば?)"><xsl:value-of select="." /></xsl:attribute>
</xsl:for-each>
<xsl:apply-templates select="node()" />
</xsl:element>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
0482nobodyさん
2006/08/17(木) 15:51:08ID:???<password>****</password>
</xsl:template>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
ただし、password要素が空でないネームスペースに属しているならば、予めxmlns:foo="http://..."としておいて、match="foo:password"としなければならない。
xmlns="http://..."としておいてmatch="password"としてもだめ。
0483nobodyさん
2006/08/18(金) 18:36:22ID:???お、出来た! W3C の <xsl:copy> のところに書いてありますね。意味が分からんかったのでスルーしてましたが。
0484nobodyさん
2006/08/26(土) 03:28:19ID:???XML から JavaScript の文字列リテラルに変換するときにエスケープする必要があるのですが。
<foo>say "good morning"</foo>
↓
var msg = "say \"good morning\"";
0485nobodyさん
2006/09/27(水) 01:19:07ID:???諸事情により内部に直接JavaScriptを書きたくなくて。。
どうしたらよいのでしょうか?
0486nobodyさん
2006/09/27(水) 02:25:20ID:???<script src="(スクリプトのURL)"/>
みたいな要素を出力した方がよいかと。
#エスパーレベル低いので外してるかな?
0487485
2006/09/27(水) 09:27:24ID:???で、ご指摘の方法でやっていたんですがうまくいきません。
むしろJavaScriptソースを直接書けば動きます。
Firefoxならどっちでもちゃんと動くんですけど。。
もう少し詳しく状況を説明しておくと
・JavaでXSL変換を行っている
・変換後データはStringとして吐き出される
・それをそのままサーブレットのPrintWriterを使って表示
してます。
0488nobodyさん
2006/09/29(金) 01:06:23ID:???<script src="(スクリプトのURL)"/> でリンクしたJSファイルと
PrintWriterが吐くページのエンコーディングが合ってないとかか?
0489nobodyさん
2006/10/03(火) 16:26:40ID:???文字コードはすべてUTF-8で統一してあります。
さらに、response.setChar〜でUTF-8を設定してあるので完璧。。だと思います。
javascriptのソース次第でなんとなりそうな気もしてきたのでとりあえずそっちで試行錯誤してみます。
0490nobodyさん
2006/10/26(木) 13:25:08ID:5D6Zlz9T環境のせいだと思うのですがIE5で動作しますか?
起動時は拡張子xslのファイルをダブルクリックするだけです。
事情により環境をいじれないので確認させてください。
よろしくおねがいします
0491nobodyさん
2006/10/26(木) 18:28:24ID:Ni4Tuu8+0492nobodyさん
2006/10/26(木) 18:34:48ID:???0493nobodyさん
2006/10/26(木) 18:38:30ID:5D6Zlz9T記述が漏れていてごめんなさい。
手順はそのようにしています。
0494nobodyさん
2006/10/30(月) 11:26:45ID:???データの再送信が行われないんだけど、
これってXSLで再送信するように変更することはできる?
0495nobodyさん
2006/11/18(土) 20:13:39ID:???0496nobodyさん
2006/11/19(日) 06:15:00ID:???■ このスレッドは過去ログ倉庫に格納されています