- PR -

繰り返し処理での固定行挿入

1
投稿者投稿内容
未記入
会議室デビュー日: 2006/02/09
投稿数: 14
投稿日時: 2007-05-18 11:40
XML初心者です。

現在XMLにてExcelを作成する処理を行っています。
その中で、5行固定で出したいという場合、
データは2行分しかない場合、残りの3行は空白行を出したいと思っております。

NO AAA BBB
------------------
1 ああ いい ← データ行
2 かか きき ← データ行
3 {空} {空} ← 空行
4 {空} {空} ← 空行
5 {空} {空} ← 空行


その場合、上の2行(データ行)に関しては「xsl:for-each」を使用し出力が
出来るのですが、残りの3行をどのように出力すればいいのかがわかりません。

「apply-templates」を使用し、テンプレート使用による繰り返し処理を行い
空行を挿入するのではないかという想像をしているのですが、具体的な方法を
教えて頂けませんでしょうか?

--↓参考までにデータ行は以下のように作成しています。---
<xsl:for-each select="xml/rs:data/z:row">
<xsl:variable name="p" select="position()"/>
<Row>
<Cell><Data ss:Type="Number"><xsl:value-of select="$p"/></Data></Cell>
<Cell><Data ss:Type="String"><xsl:value-of select="@AAA"/></Data></Cell>
<Cell><Data ss:Type="String"><xsl:value-of select="@BBB"/></Data></Cell>
</Row>
</xsl:for-each>
かめたろ
ぬし
会議室デビュー日: 2003/03/20
投稿数: 255
投稿日時: 2007-05-23 16:32
べたな方法しか思い浮かばなかったので様子を見ていたのですが・・・。
もう解決済かもしれませんが、レス付いてないので書いてみます。

コード:
for-eachの後に
<xsl:choose>
  <xsl:when test="count(xml/rs:data/z:row)=4">
    <Row> 
      <Cell><Data ss:Type="Number">5</Data></Cell> 
      <Cell><Data ss:Type="String"></Data></Cell> 
      <Cell><Data ss:Type="String"></Data></Cell> 
    </Row> 
  </xsl:when>
  <xsl:when test="count(xml/rs:data/z:row)=3">
    <Row> 
      <Cell><Data ss:Type="Number">4</Data></Cell> 
      <Cell><Data ss:Type="String"></Data></Cell> 
      <Cell><Data ss:Type="String"></Data></Cell> 
    </Row> 
    <Row> 
      <Cell><Data ss:Type="Number">5</Data></Cell> 
      <Cell><Data ss:Type="String"></Data></Cell> 
      <Cell><Data ss:Type="String"></Data></Cell> 
    </Row> 
  </xsl:when>
    :
  :
</xsl:choose>


データのカウントごとに、足りない分の空白行を出すかんじです。
スマートなやり方で解決していたら、是非教えてください。
未記入
会議室デビュー日: 2006/02/09
投稿数: 14
投稿日時: 2007-05-24 10:01
かめたろさんありがとうございます。

最初に投稿させて頂いた場合では、固定行数5行の場合でしたが
本来の仕様では固定行数が20行となっており、かめたろさんに教えて頂いた方法ではかなりのキツイかなと思っております。

ただ実際問題として、本件に関する解決法がまだ思い浮かばないため、一時的にかめたろさんの方法で行って、今後も引き続き調査をし、解決して行きたいと思います。

また、何か分かりましたら教導頂けますよう、よろしくお願い致します。
MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 2007-05-24 11:54
固定回数なら
コード:

<xsl:variable name="dummy" select="document('dummy.xml')" />
<!-- ダミーのノードリストの作り方は それぞれ -->

xml/rs:data/z:row | $dummy//A[ 20- count(xml/rs:data/z:row) >= position()]


と固定長のノードリストにして
ループの中で振り分けできます。
XSLT2.0 なら簡単かな。

[ メッセージ編集済み 編集者: MMX 編集日時 2007-05-24 11:56 ]
1

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