人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

xslでxmlの1ブロック?を調べるプログラムを教えてください。

たとえば↓のようなxmlがあるとき、
<place>の数をxslで取得するプログラムはどうしたらいいのですか?

また、<place>の子にあたる要素数を取得するxslプログラムを教えてください(おまけ)。

お願いしますm(_ _)m

<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="place.xsl"?>
<places>
<place latitude="35.672646" longitude="139.732114" id="0">
<title>ソフトバンククリエイティブ</title>
<description>出版局の所在地です</description>
<link>http://www.sbcr.jp/</link>
<image>sbp.png</image>
</place>
<place latitude="35.671836" longitude="139.734271" id="1">
<title>TBS(東京放送)</title>
<description>東京のキー局のひとつ</description>
<link>http://www.tbs.co.jp</link>
</place>
</places>
-------------------------------------


●質問者: hiyarihatto
●カテゴリ:インターネット ウェブ制作
✍キーワード:PNG TBS XML XSL ひとつ
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● lains_you
●35ポイント ベストアンサー

ノード数を取得するcount関数を使用します。


<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">

<xsl:text>placeの数:</xsl:text>

<xsl:value-of select="count(places/place)"/>


<xsl:text>placeの子の数:</xsl:text>

<xsl:value-of select="count(places/place/*)"/>

</xsl:template>

</xsl:stylesheet>


サンプルで覚えるXSLTプログラミング

http://www.atmarkit.co.jp/fxml/tanpatsu/xslt/xslt11.html

◎質問者からの返答

ありがとうございます。

この方法で、出来ました。

今、count(place)の値で分岐するプログラムを作成しているのですが、

<xsl:choose>

<xsl:when test="count(place)>4">

</xsl:when>

<xsl:otherwise>

</xsl:otherwise>

</xsl:choose>

条件によって

が変わるプログラムだと、

うまく動作しません。

テーブルの変わりに文字とかだと大丈夫なんですが‥

どなたか分かる人がいましたら教えてください。


2 ● lains_you
●35ポイント

IE6:End tag 'xsl:when' does not match the start tag 'table'.

Firefox:XML パースエラー: タグの対応が間違っています。終了タグが必要です: </table>


ブラウザ上で実行した場合、上記のようなメッセージがでませんか?

tableタグを閉じ忘れてます。


また、正常に分岐しない件ですが、下記の太字のように、count関数内でplaces/を追加

してみてください。きちんとルートからのパスを指定してあげないと、正常にカウントで

きません。


<?xml version="1.0" encoding="Shift_JIS"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">

<html>

<body>

<xsl:choose>

<xsl:when test="count(places/place) > 4">

<table border="1" CELLSPACING="0" CELLPADDING="0" width="280">

280

</table>

</xsl:when>

<xsl:otherwise>

<table border="1" CELLSPACING="0" CELLPADDING="0" width="300">

300

</table>

</xsl:otherwise>

</xsl:choose>

</body>

</html>

</xsl:template>

</xsl:stylesheet>

◎質問者からの返答

レスありがとうございますm(_ _)m

投稿を見まして、かいけつすることができました。

関連質問



●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ