- PR -

XSLで要素のソート

1
投稿者投稿内容
chaos
会議室デビュー日: 2003/10/20
投稿数: 4
投稿日時: 2003-12-02 02:36
下のような元のXML文書を、要素の並び替えを行うことはXSLで可能
でしょうか?

<?xml version="1.0" encoding="Shift_JIS"?>
<?xml-stylesheet type="text/xsl" href="xslsample.xsl"?>
<文章 地方="沖縄">
<文 句点="。">
<天気 属性="おおむね" 文末="ています">晴れ</天気>
<場所>沖縄地方は</場所>
<気象 文末="の範囲内にあって">高気圧</気象>
</文>
</文章>

上記の文書をXSLを通しブラウザ表示させたとき
"沖縄地方は高気圧の範囲内にあっておおむね晴れています。"
という文を表示させたいのです。

プログラム初心者で下らない質問かもしれませんが、要素自体
をソートし表示する方法は、なかなか載っておらず行き詰って
しまいこちらで質問させていただきました。
おばけ
ぬし
会議室デビュー日: 2002/11/14
投稿数: 609
お住まい・勤務地: 東京都江東区
投稿日時: 2003-12-02 03:10
引用:

下のような元のXML文書を、要素の並び替えを行うことはXSLで可能
でしょうか?


別にソートする必要は無いのではないでしょうか?
例えば例出のXMLでは

コード:
<xsl:template match="/文章/文">
  <xsl:value-of
    select="concat(場所/text(), 気象/text(), 気象/@文末, 天気/@属性, 天気/text(), 天気/@文末)"/>
</xsl:template>



とかでできませんか?
このスタイルシートは動かしていないですし、concatはこんな風に幾つも引数を
取れたかどうかよく覚えていませんが、、、
まあ、私の言いたいのは、「ソートは必要ないのでは?」ということです
yatcin
会議室デビュー日: 2003/11/21
投稿数: 12
投稿日時: 2003-12-03 23:51
chaosさんがやられたいことは「要素の出現の順番にとらわれずにあるルールに沿った文章を組みたい」ということでしょうか?
だとすれば必要なのは並べ替えではなくて「フィルタリング」になります。

たとえばchaosさんのxmlソース文書を目的の文書に組む場合は次のXSLTスタイルシートになります。

「xslsample.xsl」
<?xml version="1.0" encoding="Shift_Jis"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="文章">
<xsl:apply-templates select="文"/>
</xsl:template>
<xsl:template match="文">
<xsl:apply-templates select="場所"/>
<xsl:apply-templates select="気象"/>
<xsl:apply-templates select="天気"/>
<xsl:value-of select="@句点"/>
</xsl:template>
<xsl:template match="場所">
<xsl:value-of select="."/>
</xsl:template>
<xsl:template match="気象">
<xsl:value-of select="."/>
<xsl:value-of select="@文末"/>
</xsl:template>
<xsl:template match="天気">
<xsl:value-of select="@属性"/>
<xsl:value-of select="."/>
<xsl:value-of select="@文末"/>
</xsl:template>
</xsl:stylesheet>


もしも違う目的があって並べ替えが必要であれば各要素にid属性を振ってソートキーにする手段はあります。

いずれにしても並べ替えをさせるなら階層は極力浅く単純にするべきでしょうし子孫関係は一定にしておいたほうがいいですね。


[ メッセージ編集済み 編集者: yatcin 編集日時 2003-12-03 23:52 ]
1

スキルアップ/キャリアアップ(JOB@IT)