1

XSL スクリプトを次に示します。

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:msa="http://www.publictalksoftware.co.uk/msa">
  <xsl:output method="html" indent="yes" version="4.01"
    doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
    doctype-public="//W3C//DTD XHTML 1.0 Transitional//EN"/>

  <xsl:variable name="DutyHistory" select="document('DutyAssignHistory.XML')"/>

  <xsl:template match="/">
    <html>
      <head>
        <title>Test</title>
      </head>
      <body>
        <xsl:for-each select="MeetingWorkBook/Meeting">
          <p>
            <xsl:value-of select ="Date/@ThisWeek"/>
          </p>
          <xsl:variable name="Week" select="Date/@ThisWeek"/>
          <table>
            <tr>
              <td>Sound</td>
              <td>
                <xsl:value-of select="$DutyHistory/msa:DutyAssignmentHistory/msa:DutyAssignments/msa:DutyAssignmentEntry[@Week=$Week and @Mode='Weekend']/msa:Assignment[@Index='1' and @IndexType='Fixed']"/>
              </td>
            </tr>
            <tr>
              <td>Platform</td>
              <td>
                <xsl:value-of select="$DutyHistory/msa:DutyAssignmentHistory/msa:DutyAssignments/msa:DutyAssignmentEntry[@Week=$Week and @Mode='Weekend']/msa:Assignment[@Index='5' and @IndexType='Fixed']"/>
              </td>
            </tr>
            <tr>
              <td>Left Mike</td>
              <td>
                <xsl:value-of select="$DutyHistory/msa:DutyAssignmentHistory/msa:DutyAssignments/msa:DutyAssignmentEntry[@Week=$Week and @Mode='Weekend']/msa:Assignment[@Index='7' and @IndexType='Fixed']"/>
              </td>
            </tr>
            <tr>
              <td>Right Mike</td>
              <td>
                <xsl:value-of select="$DutyHistory/msa:DutyAssignmentHistory/msa:DutyAssignments/msa:DutyAssignmentEntry[@Week=$Week and @Mode='Weekend']/msa:Assignment[@Index='8' and @IndexType='Fixed']"/>
              </td>
            </tr>
            <tr>
              <td>Public Talk Chairman</td>
              <td>
                <xsl:value-of select="$DutyHistory/msa:DutyAssignmentHistory/msa:DutyAssignments/msa:DutyAssignmentEntry[@Week=$Week and @Mode='Weekend']/msa:Assignment[@Index='4' and @IndexType='Custom']"/>
              </td>
            </tr>
            <tr>
              <td>Watchtower Reader</td>
              <td>
                <xsl:value-of select="$DutyHistory/msa:DutyAssignmentHistory/msa:DutyAssignments/msa:DutyAssignmentEntry[@Week=$Week and @Mode='Weekend']/msa:Assignment[@Index='5' and @IndexType='Custom']"/>
              </td>
            </tr>
          </table>
        </xsl:for-each>
      </body>
    </html>
  </xsl:template>
</xsl:stylesheet>

ご覧のとおり、参照用に別の XML ドキュメントにリンクしています。ファイルにリンクされている例を次に示します。

<?xml version="1.0" encoding="utf-8"?>
<DutyAssignmentHistory xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.publictalksoftware.co.uk/msa">
  <DutyAssignments>
    <DutyAssignmentEntry Date="2018-01-04" Week="W20180101" Template="0" Mode="Midweek">
      <Assignment Index="2" IndexType="Fixed">Name 1</Assignment>
      <Assignment Index="5" IndexType="Fixed">Name 2</Assignment>
      <Assignment Index="7" IndexType="Fixed">Name 3</Assignment>
      <Assignment Index="8" IndexType="Fixed">Name 4</Assignment>
      <Assignment Index="13" IndexType="Fixed">Name 5</Assignment>
      <Assignment Index="14" IndexType="Fixed">Name 6</Assignment>
    </DutyAssignmentEntry>
  </DutyAssignments>
</DutyAssignmentHistory>

ユーザーは、XML 内の情報を参照して、好きなように表示したいと思うかもしれませんが、最も簡単な方法を示したいと思います。

ご覧のとおり、いくつかの基準があります。

  • Week(WYYYYMMDD)
  • Mode( MidweekWeekendまたはWeekly)
  • Template(0以上)

上記は、割り当ての適切な週にフィルターをかけます。次に、実際の割り当てを特定します。

  • Index(数値)
  • IndexType( FixedCustomFixedまたはCustom)

テンプレートを何らかの方法で (おそらく変数を使用して) 使用して、繰り返しが増えているコードを単純化することはできますか?

4

1 に答える 1