XSL/XSLT (558レス)
1-

255: 04/02/22 20:09 ID:??? AAS
>>252
Komodo
256: 250 04/02/23 13:14 ID:??? AAS
>>251
<xsl:stylesheet
version="1.0"
xmlns:xsl="外部リンク:www.w3.org"
xmlns:axsl="外部リンク:www.w3.org">
<xsl:namespace-alias stylesheet-prefix="axsl" result-prefix="xsl"/>
<xsl:template match="/">
<axsl:stylesheet>
<axsl:template match="/">
<foo bar="{'{aaa}'}"/>
</axsl:template>
</axsl:stylesheet>
</xsl:template>
</xsl:stylesheet>
こういう場合。
今試してみたらxsltproc(Using libxml 20604, libxslt 10102 and libexslt 802)だとunmatched '}'とパースエラーが出て、xalan 2.3.1だと問題無く処理できる。
xsltprocでもattribute要素使えば処理できる。

>>252
xsltはxmlなので読みやすいようにスタイルシートを適用してブラウザで見るのが良いかと。
直接編集できないけど。リアルタイムでスタイルシートを適用してくれるxmlエディタならできるかな?
エディタはEmacsでxml-lite-modeを使っている。xsltプロセッサはメインがxsltprocで変な動きをしたときはxalan。
タグの閉じ忘れがチェックできるだけでもだいぶ違うよ。
257
(1): 04/02/25 08:26 ID:Hbu4YFmr(1) AAS
XSLTって自分自身を出力するスタイルシートは書ける?
258
(1): 04/03/24 22:07 ID:QhqWFZPy(1) AAS
xhtml文書をxsltprocで変換したいと思ってるんだけど、
xhtml側のnamespaceの状態よってマッチしたりしなかったりするので困ってる。
----- test.xsl -----
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="外部リンク:www.w3.org">
<xsl:template match="html"/>
</xsl:stylesheet>
-----------------
[実行例] $ xsltproc.exe -v test.xsl test.xml 2>&1 | grep xsltProcessOneNode

----- test.xml -----
<?xml version="1.0"?>
<html xmlns="外部リンク:www.w3.org"/>
-----------------
xsltProcessOneNode: no template found for /
xsltProcessOneNode: no template found for html

このようにマッチしない。でも、namespaceを消したり名前を付けたりするとマッチする。

----- test.xml -----
<?xml version="1.0"?>
<html xmlns:xhtml="外部リンク:www.w3.org"/>
-----------------
xsltProcessOneNode: no template found for /
xsltProcessOneNode: applying template 'html' for html

何故?また回避策は?

#現象が再現できる最小のソースです。validなxhtmlに対しても同様です。
259: 04/03/24 22:10 ID:??? AAS
2行目×状態よって○状態によって
xsltprocはCygwin版libxslt1.1.2-1です。

$ xsltproc --version
Using libxml 20604, libxslt 10102 and libexslt 802
xsltproc was compiled against libxml 20604, libxslt 10102 and libexslt 802
libxslt 10102 was compiled against libxml 20604
libexslt 802 was compiled against libxml 20604
260
(2): 04/03/29 11:53 ID:??? AAS
namespaceというのは要素の苗字に当たります。
xmlns="外部リンク:www.w3.org"
と指定することは、この要素とその子孫要素の内プレフィックスの付いてないものの苗字は"外部リンク:www.w3.org"ですよと宣言することで、
xmlns:xhtml="外部リンク:www.w3.org"
と指定することは、この要素とその子孫要素のうちxhtmlというプレフィックスが付いているものの苗字は"外部リンク:www.w3.org"ですよと宣言することです。
ですから1番目のtest.xmlのhtml要素は外部リンク:www.w3.orgという苗字を持ったhtml要素ということになります。
一方2番目のtest.xmlのhtml要素にはxhtmlというプレフィックスが無いため苗字無しのhtml要素となります。

test.xslでは苗字無しのhtml要素にマッチするようになっているため1番目のtest.xmlにはマッチしませんが2番目のtest.xmlではマッチします。

解決するためにはtest.xslのxsl:template要素にxmlns="外部リンク:www.w3.org"と宣言を加えるか、
xmlns:xhtml="外部リンク:www.w3.org"と宣言を加えてxsl:templateのmatch属性を"xhtml:html"とします。
これで苗字付きのhtml要素にマッチするようになります。
261
(1): 04/03/29 12:55 ID:??? AAS
pc2鯖が消える前の>>258への解答ローカルで持ってるけど上げる?
262: 04/03/29 13:12 ID:??? AAS
貼っときますね

260 :nobodyさん :sage :04/03/26 13:09 ID:???

----- test.xsl -----
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="外部リンク:www.w3.org"
xmlns:h="外部リンク:www.w3.org">
<xsl:template match="/h:html"/>
</xsl:stylesheet>
-----------------

あるいは

----- test.xsl -----
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="外部リンク:www.w3.org"
xmlns:h="外部リンク:www.w3.org">
<xsl:template match="/"><xsl:apply-templates select="h:html" /></xsl:template>
<xsl:template match="h:html"/>
</xsl:stylesheet>
-----------------

とかどうですか。
xmlns:h=".." は xmlns=".." にしておいて
match="/html" あるいは match="/h:html" などでもいいだろうけど。
263: 04/03/29 13:14 ID:??? AAS
続き

261 :nobodyさん :sage :04/03/26 13:27 ID:???

>>260
で、できた!ありがとう!

でも、なんでこうなるの?
XML側にネームスペースがなかったり、名前付けされてたらマッチして、
デフォルトネームスペースがあるとマッチしない理屈がわかんない。
仕様?バグ?ポインタだけでも教えてもらえるとありがたい。

あと、>>260さんは何で知ってるの?(まさか、これFAQ?)
264: 04/03/29 13:20 ID:??? AAS
以上削除前の263でした。

262 :260 :sage :04/03/26 14:48 ID:???

>>260 の訂正
>xmlns:h=".." は xmlns=".." にしておいて
>match="/html" あるいは match="html" などでもいいだろうけど。

>>261
test.xsl で xmlns:h="外部リンク:www.w3.org" が無い場合、
match="html" でマッチするのは
名前空間無し + "html"
という要素だと思う。

で、XHTML のほうは
<html xmlns="外部リンク:www.w3.org"> ... </html>
なってたら、html 要素は内部的には
名前空間 "外部リンク:www.w3.org" + "html"
になってる。

名前空間無し + "html"

名前空間 "外部リンク:www.w3.org" + "html"
は違ってる。なのでマッチしない。

そこで、>>260 に書いたみたく、XSLT の側でマッチさせる対象を後者の
ような名前空間 + "html" なものになるよう指定しなきゃいけない。

<html xmlns:xhtml="外部リンク:www.w3.org"/>
と書いた場合は、<html の html は「名前空間無し + "html"」になる。
プリフィックスで xhtml に "外部リンク:www.w3.org" を割りあててる
から、これはデフォルトプリフィックス使ってる <html そのものには影響しない。
265: ”削除”後の260 04/03/29 18:58 ID:??? AAS
(´・ω・`)
266
(1): 04/04/02 00:28 ID:I+SOWEa+(1) AAS
・foo.xml
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="foo.xsl"?>
<body>
<ruby><rb>This</rb><rt>ディス</rt></ruby> <ruby><rb>is</rb><rt>イズ</rt></ruby>
<ruby><rb>a</rb><rt>ア</rt></ruby> <ruby><rb>pen</rb><rt>ペン</rt></ruby>!
</body>

・foo.xml
<?xml version="1.0" encoding="Shift_JIS"?>
<xsl:stylesheet version="1.0" xmlns:xsl="外部リンク:www.w3.org" xmlns="外部リンク:www.w3.or">
<xsl:output indent="yes" method="html"/><xsl:template match="/">
<html><body>
<xsl:for-each select="body">
<xsl:for-each select="ruby">
<xsl:value-of select="rb" />
</xsl:for-each>
</xsl:for-each>
</body></html>
</xsl:template>
</xsl:stylesheet>
で、
<html xmlns="外部リンク:www.w3.or">
<body>This is a pen!</body></html>
と出力させたいんだけど、
<html xmlns="外部リンク:www.w3.or">
<body>Thisisapen</body></html>
実際にはこう。どなたか知恵をお貸しください。おながいします。
267
(2): 04/04/02 03:16 ID:??? AAS
'!'あたりを見るとXSLを理解してないような。

<xsl:template match="/">
<html><body>
<xsl:for-each select="(body|.//rb)/text()">
<xsl:choose>
<xsl:when test=".='?'">
<xsl:text> </xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="."/>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</body></html>
</xsl:template>

テストしてないので自信はないですが。頭と尻に余計なものがくっつくヨカン。
268: 267 04/04/02 03:21 ID:??? AAS
化けた。スマン。
<xsl:when test=".='&#10;'">
全角を置き換えて。
269: 266 04/04/02 20:40 ID:??? AAS
ありがとうございました。"!"は拾ってくれるようになりました。
<html xmlns="外部リンク:www.w3.or"><body>
Thisisapen!
</body></html>
しかし、上のように単語間のスペースは拾われないみたいです。
おっしゃるとおりXSLTはまだかじりたてなので、自分でも調べてみます。
270: 04/04/02 20:50 ID:??? AAS
自己レスです。xmlのほうのbodyタグに
xml:space="preserv"
と属性を加えたら期待通りの結果が得られました。
重ね重ねありがとうございました。
271: 267 04/04/02 21:33 ID:??? AAS
<xsl:preserve-space>というタグがありますけど…
あとxhtmlの識別子が間違ってますよ。
272
(2): 04/04/08 12:47 ID:Pkn49QjT(1) AAS
<A>
 <B><C>○あいう</C></B>
 <B><C>100</C></B>
 <B><C>200</C></B>
 <B><C>○いうえ</C></B>
 <B><C>50</C></B>
</A>



<A>
 <B>
  <C>○あいう</C>
  <D>100</D>
  <D>200</D>
 </B>
 <B>
  <C>○いうえ</C>
  <D>50</D>
 </B>
</A>

に書き換えたいのですが、xpathで
1. /A/B/Cで○があるもの、もしくは○がないもの
2. 自分の一番近い兄で/A/B/Cで○があるもの
というのはどう表記されるでしょうか?
273: 04/04/08 13:10 ID:??? AAS
>>272
よく読んでいないけれど、ツリー構造の変更は XSL ではなくて、
DOM じゃないのか?
274
(1): 04/04/08 16:06 ID:??? AAS
AA省
275
(1): 04/04/08 18:38 ID:??? AAS
>>257
遅レスですが
<xsl:copy-of select="document('')/...."/>
ってこと?テンプレートとしては使えないけど。使えても意味ないけどね。
276: 04/04/09 10:37 ID:??? AAS
>>274
ありがとう。
元の処理に教えていただいたコードを入れて動かしたいと思います。
277
(1): 04/04/18 17:14 ID:??? AAS
>>275
いや、C言語とかだと自分自身を出力するプログラムが書けるんですが
外部リンク[html]:www.ice.nuie.nagoya-u.ac.jp
xsltの場合ネームスペースとかの関係で無理なんじゃないかと思って。
でもネームスペースを明示的に指定してやればできるのか?

documentで参照するのはアリなのかなぁ。
278: 04/04/18 21:38 ID:??? AAS
>>277
document('')で自分を参照するのは割と普通に使いますよ。自分は、ですが。
使ってるソースを目にすることもあります。

参照したデータはテンプレートとして使われることはないのでネームスペース
は(自分の少ない知識の範囲内では)そんなに問題にならないと思います。た
とえば

<xsl:template match="/">
<xsl:copy-of select="document('')//xsl:template[@match='/']"/>
</xsl:template>

これでも無限ループになる事はないです。もちろんこんなの意味ないので、別
のネームスペースを使って設定ファイル的なことをする方が一般的だと思います。
279
(1): 04/05/07 01:25 ID:??? AAS
XSLTXTって使ってる人いますか?
外部リンク:xsltxt.dev.java.net
外部リンク[html]:www.zanthan.com

とりあえず < とか書かなくていいのがいい。
280: 04/05/07 01:26 ID:??? AAS
あ、&lt; です↑
281: 04/05/09 20:35 ID:??? AAS
>>279
> とりあえず < とか書かなくていいのがいい。
まともな XML オーサリングツール使えよ。
282
(1): [age] 04/05/27 16:04 ID:??? AAS
<li a="2300" b="hoge"/>
<li a="jiro" b="もっこり"/>
<li a="義雄" b="boke"/>
といったようなリストがあったとして、
属性b の値が hoge の時だけ 属性a の値を取りたいんですけど、
xpathではどうすればいいのでしょうか?
283: 04/05/27 19:38 ID:??? AAS
>>282

li[@b='hoge']/@a

かな。
284
(2): [age] 04/06/04 12:24 ID:??? AAS
<a>
 <b>bbb</b>
 <c>ccc</c>
</a>
こんな感じのものを、「<b>要素が存在すればattributeにbを書き、<b>要素が存在しないまたは<b>要素の中身が空の場合はattributeにcを書く」というふうにしたいのですが、
<xsl:attribute name="foo">
 <xsl:choose>
  <xsl:when test="条件">
   <xsl:value-of select="b" />
  <xsl:/when>
  <xsl:otherwise>
   <xsl:value-of select="c" />
  <xsl:/otherwise>
 </xsl:choose>
</xsl:attribute>
whenの条件にどのように書けばいいのでしょうか?そもそもchooseは間違っているのでしょうか?
285
(1): 04/06/04 17:41 ID:??? AAS
>>284
test="b and not(b='')"
単に "not(b='')" だけでいいかも。
286: 284 04/06/04 20:42 ID:??? AAS
>>285
> test="b and not(b='')"
うまくいきました!感謝!!
287
(1): [age] 04/06/10 09:00 ID:??? AAS
1ページの表示件数を10とかに指定して、
続きは<a>で次のページを表示させる…ってことは、
xsltでできるんでしょうか?
それともほかのプログラムと組み合わせたほうが賢明なんでしょうか?
288
(1): 04/06/11 16:14 ID:??? AAS
サーバーサイドでやればできる。実際動かしてみたことある。
しかし素直にDOMとか使った方がいいかと。
289: 287 04/06/11 20:00 ID:??? AAS
>>288
DOMっすかあ・・・。
最近XMLに興味を持ち始めて、あとPHPも気になりだしたような、
プログラミングなんてまったくできない人間なので。
これから勉強していきたいと思います。ありがとう。
290: 04/06/11 21:21 ID:??? AAS
俺も一年くらい前からそんな感じで勉強してます。
291
(1): 04/06/14 05:46 ID:??? AAS
PHP を使おうとは思うんだが、サーバーで動的生成か、ローカルで静的生成かで迷ってる。
ブログ程度なら静的にすべきなのかな。でも、動的だとコンテントネゴシエーションとかブラウザ振り分けなどの恩恵が……うーむ。
292
(1): 04/06/14 06:23 ID:??? AAS
blog≠xml blog∩xml=Φ
blog≠xslt blog∩xslt=Φ

だと思うけど、違うのかな
293: 04/06/14 06:47 ID:??? AAS
>>292
Φ (ファイ) が何を意味するのかは俺には分からんが、>>291 の日本語に混乱していると推測してみた。

PHP で XSL 変換してブログを行おうと思うんだが、クライアントごとに逐一サーバーで動的変換しようか、ローカルで HTML ファイルなどを静的生成しようか迷ってる。
商用サイトなどならともかく、ブログ程度なら静的に行うべきなのかな。
でも、動的だとコンテントネゴシエーションとかブラウザ振り分けなどの恩恵が……うーむ。
294: 04/06/15 10:23 ID:??? AAS
Φは空集合やろ

blog∩xslt = Lenyaに附属してたblogのサンプル
だと思うが、出来はいまいちだった
295
(2): 04/06/23 11:34 ID:1zBprzUE(1) AAS
<item id="a">
 <created>2004-01-03T00:00</created>
 <modified>2004-01-04T00:00</modified>
</item>
<item id="b">
 <created>2004-01-02T00:00</created>
 <modified>2004-03-01T00:00</modified>
</item>
<item id="c">
 <created>2004-02-01T00:00</created>
</item>

これら item 要素の子 created・modified 両要素の内容を選別して親の item 要素を新しい順 (b・c・a) に並べ替えたいのですが、例えば以下のように xsl:sort 要素を使ってもうまくできません。

<xsl:apply-templates select="item">
 <xsl:sort select="created or modified" order="descending"/>
</xsl:apply-templates>

助けてくださいお願いします。
296
(1): 04/06/23 14:51 ID:??? AAS
>>295
"or"は論理演算子だからここで使っても意味ないよ(T/Fが返ってくる)。

select="created[not(../modified)] | modified"

でどう?
297: 295 04/06/23 14:59 ID:??? AAS
>>296
ありがとうございます。出来ました。
298
(1): 04/06/25 16:19 ID:??? AAS
xsl:copy-of で属性値を取得できません。
xsl:value-of なら属性値を取得できました。

-- xml --
<a href="外部リンク:example.org"> example </a>
-- xsl --
<xsl:copy-of select="/a/@href" /> <br />
<xsl:value-of select="/a/@href" /> <br />
-- output --
<br />
外部リンク:example.org <br />
--

xsl:copy-of を使用して属性値を取得する方法をご存知の方がいらっしゃいましたら、
その方法をお教え下さいませ。
299: 04/06/26 05:29 ID:??? AAS
それだと copy-of でコピーされるのは属性ノードだからそのままでは出力で
きない。どうしてもしたいならこんな感じで、

<xsl:copy-of select="string(/a/@href)"/>

非ノードにしたものを渡せばよい。でも value-of のほうが適切。
300: 298 04/06/26 21:02 ID:??? AAS
value-of を使うことに致します。ありがとう
301
(1): 04/07/03 03:02 ID:??? AAS
次のようなXMLデータがあるとき、
name="foo"の前後のitemのname属性値を表示するようなXSLTはどう書けばいいんでしょうか?

<list>
<item name="hoge" />
<item name="foo" />
<item name="bar"/>
</list>
302: 04/07/03 04:31 ID:??? AAS
<xsl:value-of select="item[@name='foo']/preceding-sibling::item[1]/@name"/>
<xsl:value-of select="item[@name='foo']/following-sibling::item[1]/@name"/>
かな。試してないけど。
303: 301 04/07/04 00:41 ID:??? AAS
>>301
それで成功しました。
ありがとうございます。
304
(1): 04/08/25 17:25 ID:ly9L2Z7D(1) AAS
AA省
305: 04/08/25 18:19 ID:??? AAS
>>304
count(ancestor::node())
でどうよ?
306
(1): 04/09/06 20:13 ID:koFx6bH6(1) AAS
天気予報は既存の配信ビジネスを守るためにRSS配信できない
外部リンク[html]:neta.ywcafe.net

国民の税金で気象データの収集・解析までしておきながら、
気象庁の官僚の天下り先である
・財団法人 気象業務支援センター
・財団法人 日本気象協会
の利権保護の為、未だRSS配信が拒まれているのだ。
将来的に行われるであろう地震予知の情報も、有料で国民に販売するつもりだろうか?
307
(1): 04/09/07 09:26 ID:??? AAS
二重徴税で叩けないのかな。
308: 04/09/07 09:29 ID:??? AAS
>>306
是非はともかくそんなとこのソースを元に騒いでんの?w
309: 04/09/07 14:14 ID:??? AAS
XMLのスレにマルチしまくってるから放置しとけ
310: 04/09/07 17:02 ID:??? AAS
>>307
じゃあまずガソリンスタンドをたたいてくれ。
311: 04/09/07 21:05 ID:??? AAS
気象庁職員必死だな(w
312: 04/09/08 11:32 ID:??? AAS
306,307 は気象庁を、
310 はガソリンを、
308,311 は住民を、
各自、自由に叩いてください。
313 は XSL/XSLT ネタ、よろしく。
313: 04/09/09 02:59 ID:??? AAS
気象庁住民はガソリンで逝ってよし。
314: 04/09/09 09:57 ID:??? AAS
XSL/XSLT/ネタではなく
XSL/XSLTのネタよろしく。
315
(2): 04/09/24 05:09 ID:/pWgzu1/(1) AAS
<a id="a0">
 <b id="b0">
  <c>foo0</c>
  <c>bar0</c>
 </b>
 <b id="b1">
  <c>foo1</c>
  <c>bar1</c>
 </b>
</a>

のようなデータから、<c>の値を2つ指定して最初に出てくる共通の親要素を
見つけるにはどうすればよいでしょうか?

例えば、"foo0"と"bar0"なら "b0"、"foo0"と"foo1"なら"a0"がほしいです。
共通の親をすべてならなんとかなるのですが、
その中で最初にマッチする親だとさっぱりわかりません。
よろしくおねがいします。
316
(2): 04/09/25 10:50 ID:??? AAS
>>315

(descendant::c[. = 'foo0']/ancestor::*[./descendant::c[. = 'bar1']])[last()]/@id
317: 316 04/09/26 08:08 ID:??? AAS
後で考えたら、えらい無駄な事をしてるな、と。
/descendant::c[self::node() = 'foo0']/ancestor::*[descendant::c = 'foo1'][position() = 1]
これでも、共通且つ最初にマッチする先祖を得られると思う。
318: 315 04/09/27 04:31 ID:??? AAS
>>316
ありがとうございます。いけそうです。
再帰ばっかり考えてました。

自分のXPath能力の無さに(´・ω・`)ショボーン
319
(2): 04/09/28 17:39 ID:??? AAS
質問です。

XSLT で <a href="javascript:foo('bar')">...</a> のようなタグを生成したいのですが、
引用符のエスケープの仕方がよくわかりません。ご存知の方、ご回答をお願いいたします。

現在はこんなコードを書いてます (エラーになります)
<a href="{concat('javascript:foo(', ''', @bar, ''', ')')}">
320: 319 04/09/28 17:41 ID:??? AAS
>>319
化けてしまいましたが、''' のところは '&apos;' です。
321: 319 04/09/28 18:03 ID:??? AAS
>>319
<xsl:attibute> を使えばいいのですね。自己解決しますた。お騒がせしました。
322: 04/09/28 20:00 ID:??? AAS
こういう事ですね?
<xsl:element name="a">
<xsl:attribute name="href">javascript:foo(&apos;bar&apos;)</xsl:attribute>
<xsl:apply-templates />
</xsl:element>

コピペするならこっち
<xsl:element name="a">
<xsl:attribute name="href">javascript:foo(&apos;bar&apos;)</xsl:attribute>
<xsl:apply-templates />
</xsl:element>

アンカー・テキスト不変なら、こっち
<xsl:element name="a">
<xsl:attribute name="href">javascript:foo(&apos;bar&apos;)</xsl:attribute>
アンカー・テキスト
</xsl:element>
323: 04/10/11 13:28 ID:??? AAS
XSLT Standard Library
外部リンク:xsltsl.sourceforge.net

exsltみたいなライブラリ集だけど、こっちの方が実用的?
324
(2): 04/10/14 23:53 ID:DOJgSO2G(1) AAS
XML SchemaからXSLTの雛形というかスケルトンというか
土台を出力してくれるようなツールって無いでしょうか?
フルスクラッチで作るの、面倒じゃないですか?
325: 04/10/15 00:48 ID:??? AAS
>>324
スレ違いか
2chスレ:hp
326: 04/12/06 00:30 ID:??? AAS
data1.xmlというファイルがあって中にxslファイルの参照先も書いてあるとします。
<xml...
<xslt:sheet1.xsl.....
<DataList>
<Data ID="0">
<String>データ0</String>
</Data>
<Data ID="0">
<String>データ0</String>
</Data>
<Data ID="0">
<String>データ0</String>
</Data>
</DataList>
このdata1.xmlファイルをdata1.xml?id=0みたいな呼び出し方をしてxslファイルにid=0という値を渡す方法ってあるのでしょうか?
327: 04/12/06 15:30 ID:??? AAS
何言いたいんだかようわからん
328
(1): 04/12/06 15:34 ID:jrlDRA4f(1) AAS
URLを打ち込むときに
data1.xml?id=0と打ち込み、ID=0の商品に関する情報だけを
表示したいんです。
URLで打ち込んだデータをXSL内の変数に取り込みたいのです。
現在だと、hrefつかってもIDの数だけxmlファイルを作成しないと
いけなくなってしまうんです。
329: 04/12/23 23:41 ID:??? AAS
>>328
今更ながら、xsltで全て作成してjavascriptでlocation.queryから引数受け取ってwindowのロード時に違うノードサクージョ
330: 05/01/08 15:33 ID:??? AAS
すいません質問があります。
MSXSLを用いて変換を行おうとしているのですが
コマンドを打ち込んだときに

必要な属性'{外部リンク:www.w3.org が見つかりません

という変なエラーメッセージが出てしまいます。これはどうすればいいんでしょうか?
331: 05/01/08 17:10 ID:??? AAS
330ですが
解決しちゃいました どうもです
332
(1): 05/01/10 19:16 ID:??? AAS
すみませんが誰かご教授下さい。 (マルチポストで申し訳ありません)

XMLのあるタグの属性が同じレベルのタグの属性とダブっっている時、
変換後にその属性のダブった部分を除きながら属性を並べたい場合は
どうすればよいでしょうか?

例えば

xml
<a>
<ele id="1"/>
<ele id="2"/>
<ele id="2"/>
<ele id="3"/>
<ele id="4"/>
<ele id="4"/>
<ele id="4"/>
<ele id="5"/>
</a>

を変換して

1 2 3 4 5

にするようなXSLを教えていただきたいのです。

よろしくお願いします。
333: 05/01/10 19:48 ID:??? AAS
アホか。マルチポストに返答するわけ無いだろ。
334
(1): 05/01/22 19:16 ID:WsL3wQoU(1/2) AAS
<xsl:stylesheet xmlns:xsl="外部リンク:www.w3.org(ry xmlns:aws="外部リンク:abc.com"
exclude-result-prefixes="human">

<xsl:for-each select="people/person/age">
 ここで別のXMLを取ってくる
 <xsl:apply-templates select="human:hobbies/human:hoby" />
</xsl:for-each>

<xsl:template match="human:hobby">
335: 334 05/01/22 19:17 ID:WsL3wQoU(2/2) AAS
ああっ、途中で送ってしまった… orz

>>334のようにやると下のテンプレートの中身へ行かない?ようなのですが
どこに問題があるのでしょう?
336: 05/01/24 03:30 ID:??? AAS
>>332
もう解決してるのかもしれんが
//ele[not(@id=following-sibling::node()/@id)]/@id
とかでどうすか?
337: 05/01/30 14:52 ID:0RSaGusl(1/2) AAS
xmlをエクセルから作ってるんですが、日付が1900年形式でだされてしまいます。
それを表示する際に、dd-mmm-yyのフォーマットで表示したいんですが、どうすればよいでしょうか?
338: 05/01/30 20:37 ID:0RSaGusl(2/2) AAS
外部リンク:exslt.orgのテンプレート使ってやってみたんですが
すごい遅くなりました。前もってデータを変換してXMLをつくった
方が良さそうです...
339: 2005/04/09(土)23:05 ID:0FjmIeSR(1) AAS
ノード名じゃなくて値がQNameのときに、それが特定のNSに属してるかってどうやって判断できる?

<先祖のどこか xmlns:x="外部リンク:pc8.2ch.net">
...中略...<ここ この属性の値をチェックしたい="x:999654569"/>

node系関数のnamespace-uri()は値は見れないし、
string系の関数じゃ、xが本当に外部リンク:pc8.2ch.netなのかわからん。

ずうっと名前空間宣言を全部フォローして自分で覚えとくしかないのか?
340
(2): 2005/04/21(木)17:08 ID:??? AAS
XMLもXSLもXSLTも何も知りません。

Aに1・2という情報?属性?を付けて
Bに2・3を付けて
Cに1を付けて

1が付いているのはA・C
2が付いているのはA・B
3が付いているのはB

というように表示するにはどうすればいいでしょう
341: 2005/04/21(木)18:15 ID:??? AAS
>>340
> XMLもXSLもXSLTも何も知りません。
勉強しろ。アフォか。
342: 2005/04/21(木)22:02 ID:??? AAS
System.out.println("1が付いているのはA・C");
System.out.println("2が付いているのはA・B");
System.out.println("3が付いているのはB");
343: 2005/04/21(木)23:30 ID:??? AAS
いや>>340的にはこっちのほうがわかりやすかろう。

MsgBox "1が付いているのはA・C", vbInformation
MsgBox "2が付いているのはA・B", vbInformation
MsgBox "3が付いているのはB", vbInformation
344
(4): 2005/07/29(金)15:21 ID:??? AAS
デフォルトの名前空間が指定されている時、プレフィックスの無い Element は XPath でどう表現すればいいの?

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="design.xsl"?>
<hage:root xmlns="外部リンク:example.com" xmlns:hage="外部リンク:example.com">
<item1>あいうえお</item1>
<item2>かきくけこ</item2>
</hage:root>

こんな XML から "あいうえお"を取り出したいんだけど /hage:root/item1 じゃうまくいかないみたい。
345
(2): [age] 2005/08/04(木)10:02 ID:??? AAS
スタイルシート側(desin.xslのことか?)の名前空間の設定はどうなってる?
携帯だからアドバイスしづらいな…。

まあ多分スタイルシートではxmlns="XHTMLのURI"とかやってると思う。
(これ自体は問題ないし下手にprefixつけるとUAが出力結果をXHTMLとして認識できない。)
でもこの場合あんたのスタイルシート内のXpath式内でitem1を指定しても
それはXHTMLでのitem1要素を指定していることになっている。
もちろんあんたはそんなもの扱った覚えは無いだろうしXHTMLにもそんな要素はない。
正しく処理させるには名前空間について勉強してくれ。
ソースXML文書のprefix無い方の名前空間のURIを$aとおくと、
スタイルシート側にxmlns:omanko="$a"を書き加えXPathではomanko:item1と
指定すればいい。xsl:の部分とかも不都合があればばんばん書き換えればいいから。

携帯からだから妙ちくりんな書き方になったが頑張ってくれ
んじゃ
346
(1): 2005/08/14(日)13:37 ID:XDX8Ip5H(1) AAS
質問です。

UTF8で配信されるXMLをSHIFT_JISでHTML化したい
場合は

?JAVAのXMLパーサーとか使う
?perlとかphpでSOAP
なんていう方法しかありませんか?

現在はXSLTで簡単にスタイルシートあててやってますが
SHIFT_JISで出力するのは無理ぽ。。です。
どうにか方法はありますのでしょうか。。

携帯サイトを運営しているのですが
UTF8じゃ文字ばけするぞゴラァ!という
クレームが多くて困ってます。
347
(1): 2005/08/14(日)15:10 ID:??? AAS
>>346
XSLTのoutput要素のencoding属性使ってもうまくいくと思う。
まぁ、XMLパーサ使ってフィルタプログラム作成するなり、既存のフィルタツールなり使ったほうが
柔軟性はあるが。

<<サンプル>>
■data.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="data.xsl" ?>
<root>
  <data>あああ</data>
  <data>いいい</data>
</root>

■data.xsl
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="外部リンク:www.w3.org">
  <xsl:output method="html" encoding="Shift_JIS" />
  <xsl:template match="root">
    <html><head><title>utf8->SJIS</title></head><body>
      <xsl:for-each select="data">
        <xsl:value-of select="text()" /><br />
      </xsl:for-each>
    </body></html>
  </xsl:template>
</xsl:stylesheet>
348
(2): 2005/08/14(日)18:40 ID:??? AAS
>>347

ご丁寧に有難う御座います。
<xsl:output method="html" encoding="Shift_JIS" />
なんてタグがあるなんて知りませんでした。。orz

早速、その方法を試してみました。

結果報告

?PCブラウザで見る(IE)
ホワイトアウトしてしまいました。
右クリでエンコード指定でシフトジスにすると表示されました。

?元からUTF8対応携帯で見る
文字化けしてしまいました。

?シフトジスしか対応していない携帯で見る
うまく表示されるようになりました。

つまり 今まで見えてた??は見えなくなりましたが
?は見えるようになりました。

恐らくブラウザ側ではUTF8として認識しているためだと
思います。

素直にphpのxmlパーサーとかでやりつかね・・・
(php5入ってないので・・・SOAP無理ぽ)
349
(1): 2005/08/14(日)18:50 ID:??? AAS
>>348
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS" />
を挿入してみたらどうですかね。
350
(1): 2005/08/14(日)19:36 ID:??? AAS
>>348
phpでサーバサイドでのXSLT変換か。取りあえず、UTF-8からShift_JISへの変換はできたみたいだね。

phpの話になってスマンが、もしかして、header('Content-Type: text/html; charset=UTF-8');とかなってる?
header('Content-Type: text/html; charset=Shift_JIS');にしてみたら、もしかしたら動くかもね。
351: 2005/08/14(日)22:31 ID:??? AAS
>>349
>>350

<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS" />
もやってみましたが、同様の結果でした。

どうもXSLTだけでの解決は難しそうなので
PHPでやってみます。

変更できたらまたご報告します。

(ちょちょっとPHPのXMLパーサ関数でやってみましたが、できそうです。)
352
(1): 344 2005/08/17(水)20:33 ID:??? AAS
>345
わざわざ携帯から長いレスをサンクス
俺のレスの前が3ヶ月前だったので回答は期待できないと思ってスレみてなかったよorz

結局質問してから別の場所で答えを見つけたんだけど、
XSL で XPATH 書いても XSL で定義した既定のネームスペースは XPath には適用されないってことなんだよな。
なんでそんな変な仕様なのか理解に苦しむけど。
てことで、 XML の既定のネームスペースを XSL 側では Prefix 付きで定義することで解決しました。
353: [age] 2005/08/18(木)19:39 ID:??? AAS
ちょっとYOUはまだ勘違いしてるかも…。そこらへんはXSLTはまともな仕様でつよ。
もっと名前空間のよさを感じてちょうだい!!!!

そして私は
354: 344 2005/08/18(木)22:02 ID:??? AAS
外部リンク[html]:www2.xml.gr.jp
あたりを見て >352 のような結論に至ったわけだが、なんか勘違いがある?と思って
改めてリンク先のスレッドを読んでると
外部リンク[html]:www2.xml.gr.jp

> さらに、XPath式中のQNameを展開するときには、以下のルールが成り立ちます。
> 2. プリフィックスがついていない場合、ネームスペースURIはnullになる。
とあるな。確かに勘違いしてたかも。

> そして私は
続きが気になるよ(´・ω・`)
355: 初心者 2005/09/04(日)03:53 ID:??? AAS
どうか教えてください。
AWSでxsltを始めたばかりです。

<img>
<xsl:attribute name="src">
<xsl:value-of select="aws:MediumImage/aws:URL" />
</xsl:attribute>
<xsl:attribute name="width">
<xsl:value-of select="aws:MediumImage/aws:Width" />
</xsl:attribute>
<xsl:attribute name="height">
<xsl:value-of select="aws:MediumImage/aws:Height" />
</xsl:attribute>
<xsl:attribute name="alt">
<xsl:value-of select="$amazon_item_name" />
</xsl:attribute>
</img>

とすると、<img src="画像リンク[jpg]:images.amazon.com" width="xxx" height="xxx" alt="xxx">になってしまい、閉じタグをいれることができません。
xsltでどう指定すると閉じタグをいれることができるのでしょうか?
356
(1): 2005/09/04(日)10:59 ID:??? AAS
<xsl:output method="xml"/>
をxsl:stylesheetの直下に入れる、かな。
XHTMLでないHTMLとして出力されていると思われ。
357: 初心者 2005/09/05(月)02:29 ID:??? AAS
>>356
どうもありがとうございます。
おっしゃる通りの方法でできました。

ただ、新しい問題が発生しました。
お付き合いいただけましたら嬉しいです。

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 みたいな形で出力した方が適当でしょうか?
358: 初心者 2005/09/05(月)02:47 ID:??? AAS
ゴメンナサイ。
ググったら見つけました。

<xsl:output method="xml" omit-xml-declaration="yes" /> とすると、XML 宣言をしないようにできるようですが
実際には出力されてしまいます。
なにかおかしいですかね?
359: 2005/09/10(土)01:33 ID:??? AAS
どっちでもいいけど
alt="{$変数名}"
とは書かないの?
call-templateする予定があるとか??
あと最初以外にXML宣言入るのは文法の問題あるよ。
ただUAが無視してくれているだけだけど。
360: [age] 2005/09/29(木)03:07 ID:??? AAS
age

どなたかXSLT2.0の話でも…
361: 2005/09/29(木)11:45 ID:??? AAS
XSLTとDSSSLのいいとこどりみたいなXSieve
外部リンク:xsieve.sourceforge.net
362: 2005/10/01(土)21:07 ID:??? AAS
今アマゾンウェブサービスでXSLファイルを書いてるのですが
何故かVersion=2005-09-15だと、StyleにXSLファイル指定してもうまくいきません。
AWSでXSLやるときの条件みたいなものって何かありますか?
363: 2005/10/04(火)17:41 ID:otfuFaaW(1/2) AAS
XSLTを書いていると、かなり長くなってしまったんですが、XSLTファイルをモジュールや関数みたいに分割することはできますか。
仕様書をみたけど、それらしい機能が見つかりませんでした。
364
(1): 2005/10/04(火)21:01 ID:??? AAS
xsl:include, xsl:import
365: 2005/10/04(火)21:53 ID:otfuFaaW(2/2) AAS
>>364
ありがとう。スタイルシートの取り込みってあったから、てっきりCSSのことだと思ってた。
XSLTファイルじたいがスタイルシートなのね。べんきょうになりますた。
366: 2005/10/15(土)16:29 ID:dOz9BDB0(1) AAS
XSLについて質問です。
DBから取得したデータを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の名前で参照するにはどうやればよいのでしょうか。
367: サッカー少年大好き 2005/10/15(土)17:00 ID:??? AAS
/child::A/child::*[attribute::key='str']/attribute::value

でいけると思われ。
(child::は省略可、attribute::は@に置換可)

結論を言うと、XPathの勉強をおすすめする。
368: 訂正 2005/10/15(土)17:04 ID:??? AAS
child::*はchild::Bにした方がいいかもしんね。
strにはkeyの値を入れるんだよ。
369: 2005/10/15(土)21:29 ID:??? AAS
出来ましたありがとうございます。
本来なら勉強しなきゃいけないんですが、助かりました。
370
(2): 2005/10/17(月)19:35 ID:SiiJse0Y(1) AAS
ソースは
外部リンク[xml]:www.wakkaya.com
外部リンク[xsl]:www.wakkaya.comです。

まず、
<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と表示されますか?
どなたかご教授下さい。何卒宜しくお願い致します。
371
(1): 2005/10/17(月)20:58 ID:??? AAS
positionはfor-eachでselectした時点で決まるので、selectの時点で2005を含むかどうか調べる。

<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>
372: 370 2005/10/17(月)23:18 ID:??? AAS
>>371
うまくいきました!
本当に助かりました。有り難う御座います。
373
(1): 370 2005/10/18(火)08:05 ID:??? AAS
連続質問ですみません。ソースは引き続き
外部リンク[xml]:www.wakkaya.com
外部リンク[xsl]:www.wakkaya.comです。

今度は、<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から始まります。
対処法をお教え頂けませんでしょうか?本当に度々ですみません。
374
(1): 2005/10/18(火)12:21 ID:??? AAS
>連続質問ですみません。ソースは引き続き
とか書くと相手にされない件
375
(1): 2005/10/18(火)16:18 ID:EpeUQJeg(1) AAS
XSLTで変数使えるのは分かったんだけど、

「x=x+1」のような

インクリメントってできないの?
376
(1): 2005/10/18(火)16:58 ID:??? AAS
>>373
371と同じ。
377: 2005/10/18(火)23:23 ID:??? AAS
>>375
マルチポストですね?
378: 2005/10/19(水)15:52 ID:HblKNOzD(1) AAS
>>374
すみません。気を付けます。

>>376
アドバイスあるが等御座います。
もすこしfor-each やifやwhen勉強して出直してきます・・・
379
(1): 2005/10/19(水)16:32 ID:??? AAS
そっちよりもXPathを覚えるほうがいいかと。
380
(2): 2005/10/20(木)13:50 ID:??? AAS
>>379
仰せの通りXPathについていろいろ調べたことろ、

<xsl:for-each select="data[contains(name, '3') and uriage > 0 ]">

とするだけでNaNをはじくことが出来ました。
なんか凄い初歩的で恥ずかしい質問であるにもかかわらずお答え下さった皆様方、
この度は誠に有り難う御座います。

これを機会にXPathを精進・・
381: 2005/10/22(土)08:44 ID:??? AAS
>>380
ていうかお前にはxmlはおろかwebそのもののセンスも無いからやめとけ
1-
あと 177 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.051s