0

私は xslt を初めて使用し、ノードに子があるかどうかを確認するためにさまざまな方法を試しました。私は次のものを持っています:

<xsl:if test="child::list">

上記の部分は機能しますが、問題はwhen、このメソッドで を使用してみましotherwiseたが、機能しません。それは次のように見えました:

<xsl:when test="child::list">

うまくいかないので間違っていると思います。

コードは以下のとおりです。

<xsl:for-each select="td">
<td>
    <xsl:when test="child::list">
        <table cellpadding='0' cellspacing='0'>
            <thead>
                <tr>
                    <xsl:for-each select="list/item/table/thead/tr/th">
                        <th><xsl:value-of select="self::node()[text()]"/></th>
                    </xsl:for-each>
                </tr>
                <xsl:for-each select="list/item/table/tbody/tr">
                    <tr>
                        <xsl:for-each select="td">
                            <td><xsl:value-of select="self::node()[text()]"/></td>
                        </xsl:for-each>
                    </tr>
                </xsl:for-each>
            </thead>
        </table>
    </xsl:when>
    <xsl:otherwise>
        <xsl:value-of select="self::node()[text()]"/>
    </xsl:otherwise>
</td>
</xsl:for-each>

どんな助けでも大歓迎です...

4

2 に答える 2

3

xsl:whenxsl:otherwise内にある必要がありますxsl:choose:

<xsl:choose>
  <xsl:when test="...">
    <!-- Do one thing -->
  </xsl:when>
  <xsl:otherwise>
    <!-- Do something else -->
  </xsl:otherwise>
 </xsl:choose>

ただし、ここですべきことは、テンプレートを適切に利用することです。

  <xsl:template match="something">
    ....
    <xsl:apply-templates select="td" mode="list" />
    ....
  </xsl:template>

  <xsl:template match="td" mode="list">
    <xsl:value-of select="."/>
  </xsl:template>

  <xsl:template match="td[list]" mode="list">
    <table cellpadding='0' cellspacing='0'>
      <thead>
        <xsl:apply-templates select='list/item/table/thead/tr' />
        <xsl:apply-templates select="list/item/table/tbody/tr" />
      </thead>
    </table>
  </xsl:template>

  <xsl:template match="th | td">
    <xsl:copy>
      <xsl:value-of select="." />
    </xsl:copy>
  </xsl:template>

  <xsl:template match="tr">
    <xsl:copy>
      <xsl:apply-templates select="th | td" />
    </xsl:copy>
  </xsl:template>
于 2013-04-25T10:07:35.263 に答える
0

作成した XSLT が適切ではありません。xsl:when は、XSLT にない xsl:choose の子要素です。最初に修正して、結果をお知らせください。

于 2013-04-25T10:07:19.107 に答える