0

次のデータを含む xml ファイルがあります。

<structuredBody>
  <component>
    <section>
      <templateId root="2.16.840.1.113883.10.20.22.2.3.1" />
      <entry>
        <organizer>
          <component>
            <observation>
              <code displayName="TIBC" />
              <effectiveTime value="8/29/2013 12:00:00 AM" />
              <value value="39" />
              <referenceRange>
                <observationRange>
                  <text />
                </observationRange>
              </referenceRange>
            </observation>
          </component>
        </organizer>
      </entry>
      <entry>
        <organizer>
          <component>
            <observation>
              <code displayName="TSAT" />
              <effectiveTime value="8/29/2013 12:00:00 AM" />
              <value value="25" />
              <referenceRange>
                <observationRange>
                  <text />
                </observationRange>
              </referenceRange>
            </observation>
          </component>
        </organizer>
      </entry>
      <entry>
        <organizer>
          <component>
            <observation>
              <code displayName="Albumin" />
              <effectiveTime value="9/5/2013 12:00:00 AM" />
              <value value="46" />
              <referenceRange>
                <observationRange>
                  <text />
                </observationRange>
              </referenceRange>
            </observation>
          </component>
        </organizer>
      </entry>
      <entry>
        <organizer>
          <component>
            <observation>
              <code displayName="ALT" />
              <effectiveTime value="9/5/2013 12:00:00 AM" />
              <value value="48" />
              <referenceRange>
                <observationRange>
                  <text>21-72</text>
                </observationRange>
              </referenceRange>
            </observation>
          </component>
        </organizer>
      </entry>
      <entry>
        <organizer>
          <component>
            <observation>
              <code displayName="Bicarbonate" />
              <effectiveTime value="9/5/2013 12:00:00 AM" />
              <value value="69" />
              <referenceRange>
                <observationRange>
                  <text />
                </observationRange>
              </referenceRange>
            </observation>
          </component>
        </organizer>
      </entry>
    </section>
  </component>
  <component>
    <section>
      <...>
    </section>
  </component>
  <component>
    <section>
      <...>
    </section>
  </component>
</structuredBody>

肉付けされたセクション スニペットにあるデータを、4 つの列を含む 2 列のテーブルに出力したいと考えています。つまり、各エントリに 4 つの値を抽出してから、完全なエントリ出力 (出力時に effectiveTime/@value、code/@displayName、value/@value、および referenceRange/observationRange/text を含める必要があります) をカスケードする必要があります。ページを最初に下に、次に上に。サンプル データを使用すると、次のようになります。

<table>
  <tr>
    <td>entry set 1</td>
    <td>entry set 4</td>
  </tr>
  <tr>
    <td>entry set 2</td>
    <td>entry set 5</td>
  </tr>
  <tr>
    <td>entry set 3</td>
    <td>&nbsp;</td>
  </tr>
</table>

位置に変更を加えることで、横に移動してから下に移動できますが、最初に下に移動してから横に移動する方法がわかりません。

これが私が持っているxslですが、出力が得られません:

<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:ms="urn:schemas-microsoft-com:xslt"
  xmlns="http://www.w3.org/1999/xhtml">

  <xsl:output method="html" indent="yes"/>
  <xsl:param name="colLabs" select="2"/>

  <xsl:template match="/">
    <xsl:if test="//section[templateId/@root='2.16.840.1.113883.10.20.22.2.3.1']!=''">
      <xsl:variable name="rowLabs" select="ceiling(count(entry) div $colLabs)" />

      <div style="margin-bottom: 5px; padding: 5px; border-bottom: 1px solid #000000;">
        <span style="font-weight: bold;">Lab Results:</span>
        <table border="0" cellspacing="0" cellpadding="1" width="99%" style="font-size: 11px;">
          <xsl:for-each select="//section[templateId/@root='2.16.840.1.113883.10.20.22.2.3.1']/entry[position() &lt;= $rowLabs]">
            <tr>
            <xsl:variable name="otherEntries" select=".|following-sibling::entry[position() mod $rowLabs = 0]" />
            <xsl:apply-templates select="self::*|$otherEntries" />
            <xsl:call-template name="blankentries">
              <xsl:with-param name="entries" select="$colLabs - count($otherEntries) - 1" />
            </xsl:call-template>
            </tr>
          </xsl:for-each>
        </table>
      </div>
    </xsl:if>

  </xsl:template>

  <xsl:template match="entry">
    <td>
      <xsl:number />
    </td>
  </xsl:template>

  <xsl:template name="blankentries">
    <xsl:param name="entries" />
    <xsl:if test="$entries > 0">
      <td></td>
      <xsl:call-template name="blankentries">
        <xsl:with-param name="entries" select="$entries - 1" />
      </xsl:call-template>
    </xsl:if>
  </xsl:template>
</xsl:stylesheet>

これで助けてくれてありがとう。私がしなければならない唯一のことは、前のエントリと同じ場合に effectiveTime/@value を抑制することです (したがって、各日付を 1 回だけ表示します)。

再度、感謝します。

4

1 に答える 1