XSL/XSLT (558レス)
1-

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 -----
省14
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"とします。
省1
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>
-----------------

あるいは
省11
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"
という要素だと思う。
省15
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">
省17
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="."/>
省6
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>
省13
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
ありがとう。
元の処理に教えていただいたコードを入れて動かしたいと思います。
1-
あと 282 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.024s