XSL/XSLT
■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。
01/09/05 10:49ID:dYMWGvtU0131nobodyさん
02/09/09 13:20ID:???0132nobodyさん
02/09/09 15:14ID:???http://pc.2ch.net/test/read.cgi/php/984851406/129-130
0134nobodyさん
02/09/15 22:02ID:???処理を分岐するというのがどうすればいいのかよくわかりません。
<xsl:choose>
<xsl:when test='?????'> ←ここ
.......処理
</xsl:when>
<xsl:otherwise>
.......別の処理
</xsl:otherwise>
</xsl:choose>
?????にどう書けばいいのかな。
0135nobodyさん
02/09/15 23:45ID:???そのままノード名でいいんじゃ。
id属性だったら <xsl:when test="@id">...言ってること違ったらゴメソ。
0136134
02/09/17 01:32ID:???質問が悪かった。XMLソースがないとわかるわけないね。
<parent>
<context>
<childa>.......</childa> ←この部分が在ったり無かったりする。
</context>
<context>
</context>
</parent>
とりあえず今は、2つのXSLTファイルを用意して、
対応してる。
0137Spm
02/09/17 01:59ID:0xmOo3Ol>>135氏の言うとおりでは。ノード集合そのまま。例えば:
<xsl:when test="child::childa">
<xsl:choose>要素をどういう文脈で使っているかにも依存するので、
一概にchild::childaで良いとは言えませんが。
カレントノードは何ですか?
test属性値については、boolean関数が適用されます。
http://www.w3.org/TR/xpath#function-boolean
test属性値にノード集合を指定した場合、空ならfalse、それ以外はture.
0138134=136
02/09/17 02:50ID:???皆さんサンクスです。
試していたはずなのですが、
スペルミスなり、確認ミスなり、うっかりしてなりで見逃していた模様。
本当にありがとうございました。
0139nobodyさん
02/09/17 18:11ID:???このままじゃ、某XML Pressみたいに、
このスレも消滅してしまうかも。
0140nobodyさん
02/09/18 11:14ID:hvk3cr7f0141nobodyさん
02/09/18 15:01ID:???0142141
02/09/18 15:02ID:???0144nobodyさん
02/09/18 15:15ID:???0145JTR
02/09/25 19:45ID:y/qFoSLv出版社のHPで目次見たけど結構よさげ。
たぶんC2の専門書って日本ではこれが最初かも。
それにしてもC2を仕事で使ってる人ってどれくらい
いるんだろうか。パフォーマンス的には問題ないのかな。
0146nobodyさん
02/09/25 20:00ID:???C2仕事で使ってるYO パフォーマンスはServletでSAX使ったアプリ書いた
のと同じ程度だYO(そのまんまじゃん)
C2自体がパフォーマンスの足を引っ張るというよりも、サーバのスペックとか
DBの性能とかが重要だねやっぱり。
0147nobodyさん
02/10/02 00:23ID:???XML使いの板
http://pc3.2ch.net/test/read.cgi/hp/984950028/
レベル低め、XSLT中心、WEBでの利用。
他にXML語れる所知りませんか?
0148nobodyさん
02/10/02 11:18ID:???こんなの。
XML [WebProg]
コンテンツとデザインの分離 [WebProg]
XMLの必要性 [プログラム]
XMLプログラミング [プログラム]
XMLを限り無くオカルトに語る [心と宗教]
0150nobodyさん
02/10/05 16:58ID:eN4sGb4j0152nobodyさん
02/10/07 05:30ID:???http://pc3.2ch.net/test/read.cgi/tech/1014643296/147
0153nobodyさん
02/10/11 04:30ID:???解凍した後,コマンドラインから
SET CLASSPATH=%CLASSPATH%;C:\Xerces\xerces.jar
と入力しましたが,サンプルで試した所,
Exception in thresd "main" java.lang.NoClassDeFoundError
となってしまいました.バージョンは2.2.0です.
お分かりになる方,よろしくお願いします.
0154nobodyさん
02/10/15 01:38ID:okBjBmncサンプルを実行したとき、何てコマンドラインに入力したんだよ
java -jar xxxx.jar か?
0155nobodyさん
02/10/29 00:17ID:???変換後のXMLファイルと、変換に使ったXSLTファイルを用いて、
元のXMLファイルを再現できるものだろうか?
変換
XML[A] + XSLT → XML[B]
戻す。
XML[B]の情報 + XSLTの情報 → XML[A]
0157nobodyさん
02/10/29 23:52ID:???同じXSLTを使って、おなじXML[B]を生成するのなら、出切るかもしれない。
いや、正直わからん。俺頭悪いし。
0158八べえ
02/11/12 15:09ID:gxn/By35<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
が追記されてしまいます。
これにより、Shift-JISで書いているxml,xsltが文字化けを起こしています。
sitemap.xmap,cocoon.xconfをみてもそれらしき設定が見当たりません。
どのようにしたら、追記されなくなるのでしょうか?
0159bloom
02/11/12 15:36ID:VFQMwTMkhttp://homepage.mac.com/bloombloom/
0160HTMLをSJISで表示
02/11/13 10:55ID:oYHYr3JMdocs/samples/hello-page.xml
<?xml version="1.0" encoding="Shift_JIS"?>
を入れると、正常なUTF-8に変換されるので、文字化けしない。
結果charset=UTF-8
xslt の中のoutput は利かない。
結果htmlも、SJISにする場合は、serializer に指定する。
html serializer に、sjis 版追加
<map:serializer name="html-sjis" logger="sitemap.serializer.html" mime-type="text/html" pool-grow="4" pool-max="32" pool-min="4" src="org.apache.cocoon.serialization.HTMLSerializer">
<buffer-size>1024</buffer-size>
<encoding>Shift_JIS</encoding>
</map:serializer>
hello.html のマップをコピーして sjis バージョンを作る
<map:match pattern="hello-sjis.html"><!-- ここ**-->
<map:generate src="docs/samples/hello-page.xml"/>
<map:transform src="stylesheets/page/simple-page2html.xsl"/>
<map:serialize type="html-sjis"/><!-- ここ**-->
</map:match>
ばんざーい。 これで完成 結果charset=Shift_JIS
0161XMLをSJISで出力
02/11/13 11:03ID:oYHYr3JMhello-sjis.html を指定すると、 SJIS版が表示されるようになる。
別件だが
xml の出力の中の encoding=UTF-8 を変更する場合は、xslt の中で、
<xsl:output omit-xml-declaration="no" encoding="Shift_JIS"/>
とかやると良い。
0163教えて下さい
02/11/13 17:52ID:fcqFiIq0「disable-output-escaping="yes"」を指定したいのですが、
まとめて設定するにはどのようにしたらよいのでしょうか?
0164nobodyさん
02/11/15 22:35ID:Q0ofQCcSXSLT を書いて XSLT を変換...
0165nobodyさん
02/11/15 23:27ID:y2tgiCuR0166nobodyさん
02/12/09 01:32ID:eA2V6vYL<a>
<xsl:attribute name="href">
<xsl:value-of select="@url" />
</xsl:attribute>
<xsl:attribute name="target">
_self
</xsl:attribute>
<xsl:value-of select="@url" />
</a>
とXSLでリンクを作ったんですが、targetを _self にしても、_blank みたいに別ウィンドウでリンク先が表示されてしまいます。
_self や _top のように別ウィンドウを開かないでリンク先を表示させるにはどうすればいいのでしょうか?
0167166
02/12/09 01:51ID:???<xsl:attribute name="target">_self</xsl:attribute>
と繋げればうまくいきました。どうも間にリターンがあったのが原因みたいです。
0168nobodyさん
03/01/06 07:36ID:???<!ENTITY foo SYSTEM "bar.xml">
を XML schema で表現するにはどうすればいいんですか?
0169nobodyさん
03/01/06 07:44ID:L2+zJcVG0170山崎渉
03/01/15 13:36ID:???0171nobodyさん
03/01/22 05:21ID:vujRJlnb0172ぱむ
03/01/28 17:32ID:IBfGocF/どうすればいいんですか?
<map:generate src="aaa.xml"/>
<map:generate src="bbb.xml"/>
<map:transform src="ccc.xsl"/>
とすると「適用出来るxmlは1つだけ」というエラーが出てしまいます。
だれか宜しくお願いします。
0173nobodyさん
03/01/29 13:27ID:L9yee78Z0174nobodyさん
03/02/11 22:52ID:K0N8t3Ee0175nobodyさん
03/02/12 17:42ID:rtj1FkeBhttp://www.zdnet.co.jp/news/0302/12/nebt_21.html
MicrosoftはInfoPathで作成したフォームを使い
医療電子データ交換用形式で送るデモも実施。
同社はXFormsではなくXSLTの採用を決定
0176nobodyさん
03/02/12 17:56ID:gzTJY/OJ0177nobodyさん
03/02/20 19:11ID:ywFHezDA----------
<foo:root xmlns:foo="http://foo-namespace" xmlns:bar="http://bar-namespace">
<bar:e1>this is <foo:e2>a</foo:e2> pen. </bar:e1>
</foo:root>
----------
これを以下の xslt に食わせて,
foo に属する要素を全て bar の要素に変換します.
----------
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:foo="http://foo-namespace" xmlns:bar="http://bar-namespace" version="1.0">
<xsl:output indent="yes" omit-xml-declaration="yes" />
<xsl:template match="foo:root"><bar:root><xsl:apply-templates select="*" /></bar:root></xsl:template>
<xsl:template match="foo:e2"><bar:e2><xsl:value-of select="." /></bar:e2></xsl:template>
<xsl:template match="@*|node()"><xsl:copy><xsl:apply-templates select="@*|node()" /></xsl:copy></xsl:template>
</xsl:stylesheet>
----------
すると,以下のような xml 文書 (多少整形してあります) が得られるのですが,
----------
<bar:root xmlns:bar="http://bar-namespace" xmlns:foo="http://foo-namespace">
<bar:e1>this is <bar:e2>a</bar:e2> pen.</bar:e1>
</bar:root>
----------
結果として全く使われていない foo に対する宣言が文書に含まれてしまいます.
exclude-result-prefixes="foo" を指定しても,bar:e1 要素に宣言が現れるだけで意味がありませんでした.
これを取り除く (最適化?) することはできないのでしょうか.
いや,実害はないんですけど気持ち悪くて...
0178177
03/02/20 19:13ID:???改行削ったらソースが読みづらくなってしまいました……スマンコ
0180177
03/02/21 10:10ID:???えーと,「何で変換する必要があるの?」という意味でしょうか.
>>177で挙げた例は,現象が再現する最小限のソースでして
(もっと短くできるかもしれませんが),実際は置き換え以外にも色々やってるんです...
0182177
03/02/23 21:47ID:ORn8WdNQすいません,書き忘れました.
xalan-java 2.4.D1 です.
0183山崎渉
03/03/13 17:11ID:???0184nobodyさん
03/04/02 23:28ID:???0185nobodyさん
03/04/07 01:23ID:???素直に全部JavaScriptにするか、サーバサイドで作るべきだダタヨ。
0186nobodyさん
03/04/07 01:46ID:uo8jDP5o0187山崎渉
03/04/17 12:08ID:???0188nobodyさん
03/04/19 11:48ID:4Vo7Hobj下の様にすると全タグについて定義しなくてはならなくなってしまう・・
<xsl:template match="ABCD">
<ABCD>
<xsl:apply-template/>
</ABCD>
</xsl:template>
やりたいことは
xmlの一部のタグだけ変換したいのですが
それ以外はそのままのタグで出力したいのです
copy-of とか使うと編集できないし。。。
すごくくだらない質問ですみませんが教えていただけないでしょうか?
0189nobodyさん
03/04/20 04:35ID:???<xsl:template match="ABCD">
<xsl:element name="{local-name()}">
<xsl:apply-template/>
</xsl:element>
</xsl:template>
ABCD をワイルドカードにすると全部引っかかる。
0190山崎渉
03/04/20 06:00ID:???( ^^ )< ぬるぽ(^^)
0191nobodyさん
03/05/19 12:22ID:UmHfFrg2オライリーのはわかりにくい。
0192山崎渉
03/05/22 02:00ID:???0193山崎渉
03/05/28 17:20ID:???ピュ.ー ( ^^ ) <これからも僕を応援して下さいね(^^)。
=〔~∪ ̄ ̄〕
= ◎――◎ 山崎渉
0194山崎 渉
03/07/15 11:14ID:???__∧_∧_
|( ^^ )| <寝るぽ(^^)
|\⌒⌒⌒\
\ |⌒⌒⌒~| 山崎渉
~ ̄ ̄ ̄ ̄
0195山崎 渉
03/08/02 02:37ID:???( ^^ )< ぬるぽ(^^)
0196ぼるじょあ ◆ySd1dMH5Gk
03/08/02 05:19ID:???ピュ.ー ( ・3・) ( ^^ ) <これからも僕たちを応援して下さいね(^^)。
=〔~∪ ̄ ̄ ̄∪ ̄ ̄〕
= ◎――――――◎ 山崎渉&ぼるじょあ
0197山崎 渉
03/08/15 22:59ID:???│ ^ ^ │<これからも僕を応援して下さいね(^^)。
⊂| |つ
(_)(_) 山崎パン
0198nobodyさん
03/09/07 21:17ID:PQrT+UlAを
<p>a b c <q>d</q> e <q>f</q> <q>g</q> h</p>
に変換する XSL が分からん。for-each じゃ出来ないよね?
0199nobodyさん
03/09/07 23:33ID:X8dU+/Y3yにマッチしてqにおきかえるテンプレートをかけばいいだけじゃんよ
0201nobodyさん
03/09/26 10:15ID:Hq0iAR6d<title>ちょっとここを通られた</title>
<p>なぞの白い物体に我が家をあらされてしまった。</p>
<p>訴訟を起こして謝罪と賠償を要求したい。</p>
を
<div class="section">
<h2><date>9月2日</h2>
<div class="subsection">
<h3>ちょっとここを通られた</h3>
<p>なぞの白い物体に我が家をあらされてしまった。</p>
<p>訴訟を起こして謝罪と賠償を要求したい。</p>
</div>
</div>
と変換するにはXSLTをどう書けばいいのでしょうか。
0204nobodyさん
03/09/26 22:18ID:???整形式にしなきゃいけないのは変換前のほうなんだが。
本当にやりたいことは別にあるんじゃないかとも思うが、
とりあえず、親要素を???とすれば、こんな感じ。
<xsl:template match="???">
<div class="section">
<xsl:apply-templates select="date" />
<div class="subsection">
<xsl:apply-templates select="title" />
<xsl:apply-templates select="p" />
</div>
</div>
</xsl:template>
<xsl:template match="date"><h2><xsl:xsl:apply-templates /></h2></xsl:template>
<xsl:template match="title"><h3><xsl:xsl:apply-templates /></h3></xsl:template>
<xsl:template match="p"><p><xsl:xsl:apply-templates /></p></xsl:template>
0205nobodyさん
03/10/10 20:26ID:???<section>
<title>TITLE</title>
<sentences><p></p>....</sentences>
<section>
<title>子セクションTITLE</title>
<sentences><p></p>....</sentences>
</section>
<section>
<title>子セクションTITLE</title>(以下略&再帰的な文法)
</section>
</section>
にしてる。
0207nobodyさん
03/10/17 21:05ID:ckGd54O2XSLTで、元の構造を保ったまま、
XMLのテキストを一部分だけ変えるというのは簡単に出来るのでしょうか?
例えば、簡単な例ですが、
<A>
<B>hoge</B>
</A>
とあったときにhogeを何か別の文字列に変換したいという事です。
やはりその構造にあった、スタイルシートを書くしかないのでしょうか?
0211nobodyさん
03/10/19 17:43ID:???何がしたいのかというとページ内リンクがしたくて、
c要素を変換した(1*)や(*2)などを押すと、
f要素の(*1)や(*2)に飛びたいのです。
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="sample.xsl" type="text/XSL"?>
<A>
<b>テキスト1<c id="A" /></b>
<b>テキスト2<c id="B" /></b>
<b>テキスト3<c id="A" /></b>
<b>テキスト4<c id="A" /></b>
<e>
<f id="A">参照テキスト</f>
<f id="B">参照テキスト</f>
</e>
</a>
↓変換↓
テキスト1(*1)
テキスト2(*2)
テキスト3(*1)
テキスト4(*1)
(*1)参照テキスト
(*2)参照テキスト
0212211の続き
03/10/19 17:44ID:???ページ内リンク自体は簡単にできるのですが、
(*1)、(*2)などの番号を振るのが難しいです。
f要素の番号は単純にnumberでカウントしているのですが、
c要素での番号が振れません。
xslはネットをうろついて見つけた近そうなものを
参考にしながら、こんな感じになっています。
↓
0213212の続き
03/10/19 17:48ID:???<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html" version="4.0" encoding="Shift_JIS" />
<xsl:template match="/">
<html><head><title>sample</title></head><body>
<xsl:apply-templates />
</body></html>
</xsl:template>
<xsl:template match="b">
<div><xsl:apply-templates /></div>
</xsl:template>
<xsl:template match="c">
<xsl:variable name="ID" select="@id" />
<xsl:element name="a">
<xsl:attribute name="href">#<xsl:value-of select="@id" /></xsl:attribute>
(*<xsl:number count="f" /><xsl:value-of select="../../e/f/@id[../@id=$ID]" />)
</xsl:element>
<xsl:apply-templates />
</xsl:template>
0214213の続き
03/10/19 17:49ID:???<div>
<xsl:element name="a">
<xsl:attribute name="name"><xsl:value-of select="@id" /></xsl:attribute>
(*<xsl:number count="f" />)
</xsl:element>
<xsl:apply-templates />
</div>
</xsl:template>
</xsl:stylesheet>
f要素にマッチングさせたnumberをとかを取得できればいいのかなーと思って、
いろいろと考えてみたのですが、↑まで書いたところで???になりました。
どなたかお知恵を貸してください。。。。
0215nobodyさん
03/11/29 01:53ID:0RUQwDGuxmlが
<item>
<text>
ああああああああああ
ああああああああああ
ああああああああああ
</text>
<text>
いいいいい<em>イイイイイ</em> <br />
いいいいいいいいいい <br />
いいいいいいいいいい <br />
</text>
</item>
このように与えられていて、これを
<!-- タグ付きで、そのまま出力 -->
<p>
ああああああああああ
ああああああああああ
ああああああああああ
</p>
<p>
いいいいい<em>イイイイイ</em> <br />
いいいいいいいいいい <br />
いいいいいいいいいい <br />
</p>
<!-- タグを削って 32bytes に切り詰め、最後の 3bytes を '...' に変換し、出力 -->
<p>ああああああああああああああ ...</p>
<p>いいいいいイイイイイいいいい ...</p>
このように出力したいのですが、xslはどのように書けばよいのでしょうか。
0216215
03/11/30 02:13ID:???「タグを削って 32bytes に切り詰め、最後の 3bytes を '...' に変換し、出力」 は未解決です。
どなたか御協力を賜りたく思います。
0217nobodyさん
03/11/30 02:59ID:???プログラミング言語の経験は?
0218215
03/11/30 05:20ID:???お騒がせして御免なさい。
>217
>仕様書
少しは読みますが、リファレンス的です。
>プログラミング言語
c/c++ を使う事が出来ます。
0219nobodyさん
04/01/02 03:53ID:goN3d3Pm行いたいんだけど、そういうことって簡単にできますか?
どんな感じで実装すれば良いのかご存知の方教えてください。
javascriptでXSLTを触らないとダメなのかな・・。
0220nobodyさん
04/01/02 13:08ID:???トップレベルの xsl:param へ実行時にパラメータを渡せるから、
それで、a < position() and position() <= a + 50 とかすれ。
0221nobodyさん
04/01/02 14:59ID:goN3d3PmIEから外部パラメータとして与える方法を探したけどどうしてもわかりません。
普通に/list.xml&index=50とかURL書いても無視されるし。
0223nobodyさん
04/01/02 16:08ID:goN3d3Pmえ・・そうなんすか。
ホントXML全然知らないんで、とんちんかんなレスになっちゃうかも
しれないけど、XSLTってユーザーの入力値にマッチした情報の抽出を行うとか、
そういう制御は得意かと思っていたんですが違うんですか?
それはサーバサイドでやるべき事っていうことですか。
根本的なところを理解していなかったか・・_| ̄|〇ガックリ
0225nobodyさん
04/01/10 22:17ID:???♥
?
?x2665;
0226nobodyさん
04/01/14 03:43ID:???Mozillaでバッチリなのに IE で真っ白ってどういうことだ
0227225
04/01/17 15:58ID:???0228227
04/01/17 15:59ID:???0229226 227 228
04/01/17 16:17ID:???外部パラメータを与えるxmlを用意すれば、やりたい事をかなえてくれる
<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet version="1.0" encoding="UTF-8" type="text/xsl" href="page.xsl" ?>
<page index="50">
</page>
みたいな中身のないxmlを用意し、xslで <xsl:param name="index" select="/page/@index" /> をよませるのだ。
xslでは 220の <xsl:if test=" ( $index < position() ) and ( position() <= $index + 50 )"> を使う。
page.xml (中身あり) では<page index="0">、
page1.xml (中身なし) では<page index="50">、
page2.xml (中身なし) では<page index="100">、
page3.xml (中身なし) では<page index="150">、と書いておく。
page.xsl では <xsl:copy-of select="document( "page.xml" )/page/foo" /> みたいな、ドキュメントを指定した形で読み込む。
( select="/page/foo" では不可能。<xsl:template match="/page/foo"> も恐らく無理 )
おすすめは xsl:for-each
<xsl:template match="/page">
<xsl:param name="index" select="/page/@index" />
<xsl:for-each select="document( "page.xml" )/page/foo">
<xsl:if test=" ( $index < position() ) and ( position() <= $index + 50 )">
<xsl:copy-of select="current()" />
</xsl:if>
</xsl:for-each>
</xsl:template>
と、こんな感じではないかな。
ところどころ間違いがあるかもしれないが、その辺は勘弁してくれ
0230nobodyさん
04/01/26 15:30ID:TZ0JMGYOよいサンプルページないですか?
表示はXHTMLでやってます。
0231nobodyさん
04/01/27 19:27ID:b8cLgywQXSLを使ってリンクになっているHTMLを作りたいのですが,
<a href="<xsl:value-of select="./@href">"><xsl:value-of select="./@name"/></a>
のような記述をしますと,<が入れ子になっているのでエラーになってしまいます.
<xsl:text>で囲って<に置き換えたりしても駄目でした.
一体,どの様にしたら良いのでしょうか?宜しくお願いします.
■ このスレッドは過去ログ倉庫に格納されています