-1
を1つのキーを使用して:XSLT:私は形式をとるテーブルグリッドにXMLを変換する必要が相互参照に、第2の鍵
A1,B1,C1
A2,B2,C2
A3,B3,C3
私が働いているXMLは、レコードごとに一つのセルの値を提供していますが、各レコードはDayOfWeek(列)とStream(行)の値を提供します。
ストリーム用とDayOfWeek用の2つのキーを使用して簡単なXSLT変換を行いました。これらは、ストリームごとに1つずつ、週の各曜日に1つずつ、3つの行を持つという点で問題なく機能します。内容はちょうど最初の行が繰り返されているが(すなわち
A1,B1,C1,
A1,B1,C1,
A1,B1,C1
は、どのように私は両方の重要な基準に基づいて、表のセルにDisplayStuffを選択します。ここ
は私のXSLTです:?<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" indent="yes" encoding="us-ascii" />
<xsl:key name="DayOfWeek1" match="DataRow" use="DayOfWeek" />
<xsl:key name="Stream1" match="DataRow" use="Stream" />
<xsl:template match="QueryResults">
<table>
<xsl:for-each select="//DataRow[generate-id() = generate-id(key('Stream1',Stream)[1])]">
<tr style="border: 1px solid black;" class="scrolling">
<xsl:for-each select="//DataRow[generate-id() = generate-id(key('DayOfWeek1',DayOfWeek)[1])]">
<td style="border: 1px solid black;" width="100px">
<xsl:value-of select="DisplayStuff" />
</td>
</xsl:for-each>
</tr>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>
XML :
<?xml version="1.0" encoding="UTF-8"?>
<QueryResults>
<DataRow>
<Stream>1</Stream>
<DayOfWeek>1</DayOfWeek>
<DisplayStuff>A1</DisplayStuff>
</DataRow>
<DataRow>
<Stream>1</Stream>
<DayOfWeek>2</DayOfWeek>
<DisplayStuff>B1</DisplayStuff>
</DataRow>
<DataRow>
<Stream>1</Stream>
<DayOfWeek>3</DayOfWeek>
<DisplayStuff>C1</DisplayStuff>
</DataRow>
<DataRow>
<Stream>2</Stream>
<DayOfWeek>1</DayOfWeek>
<DisplayStuff>A2</DisplayStuff>
</DataRow>
<DataRow>
<Stream>2</Stream>
<DayOfWeek>2</DayOfWeek>
<DisplayStuff>B2</DisplayStuff>
</DataRow>
<DataRow>
<Stream>2</Stream>
<DayOfWeek>3</DayOfWeek>
<DisplayStuff>C2</DisplayStuff>
</DataRow>
<DataRow>
<Stream>3</Stream>
<DayOfWeek>1</DayOfWeek>
<DisplayStuff>A3</DisplayStuff>
</DataRow>
<DataRow>
<Stream>3</Stream>
<DayOfWeek>2</DayOfWeek>
<DisplayStuff>B3</DisplayStuff>
</DataRow>
<DataRow>
<Stream>3</Stream>
<DayOfWeek>3</DayOfWeek>
<DisplayStuff>C3</DisplayStuff>
</DataRow>
</QueryResults>
おそらくこれは単なる貧弱な例ですが、3x3(または3xn)グリッドを扱っていることが分かっている場合、なぜキーが必要なのですか? 3つのレコードのすべてのグループと、そのグループのすべてのレコードのセルの行を作成します。たとえば、https://stackoverflow.com/a/26573496/3016153を参照してください。 –
それが問題です。テーブルは動的です。クリニックは週7日まで稼働することができ、日は連続している必要はありません。最大10のクリニックストリームがあります。 – iainc
それが問題です。テーブルは動的です。クリニックは週7日まで稼働することができ、日は連続している必要はありません。最大10のクリニックストリームがあります。 – iainc