Найдите максимальное количество записей, используя xslt - PullRequest
1 голос
/ 04 июня 2019

У меня есть таблица, и я хочу найти максимальное количество записей из tbody and thead. Я упомянул код таблицы ниже.

<table>
  <thead>
    <row>
        <entry>
            <p>aaa</p>
            <p>aaa</p>
        </entry>
    </row>
    <row>
        <entry>
            <p>bbb</p>
            <p>bbb</p>
        </entry>
        <entry>
            <p>ccc</p>
            <p>ccc</p>
        </entry>
    </row>
</thead>
<tbody>
    <row>
        <entry>
            <p>ddd</p>
            <p>ddd</p>
        </entry>
    </row>
    <row>
        <entry>
            <p>eee</p>
            <p>eee</p>
        </entry>
        <entry>
            <p>fff</p>
            <p>fff</p>
        </entry>
        <entry>
            <p>ggg</p>
            <p>ggg</p>
        </entry>
        <entry>
            <p>hhh</p>
            <p>hhh</p>
        </entry>
        <entry>
            <p>iii</p>
            <p>iii</p>
        </entry>
    </row>
    <row>
        <entry>
            <p>jjj</p>
            <p>jjj</p>
        </entry>
        <entry>
            <p>kkk</p>
            <p>kkk</p>
        </entry>
    </row>
   </tbody>
 </table>

Это означает, что здесь максимальное количество записей составляет 5, а значение xpath равно table/tbody/row[2]/entry. Я хочу найти максимальное значение ввода между thead и tbody.

Я использовал код xslt для этого. Но это не работает должным образом. Он всегда возвращает мне 0 в качестве ответа.

<xsl:template match="table">
   <xsl:variable name="is-notempty-table" select="max(count(thead/row/entry))" />
   <xsl:value-of select="$is-notempty-table" />
</xsl:template>

Помогите мне решить эту проблему.

Ответы [ 2 ]

1 голос
/ 04 июня 2019

Проблема с этим ...

<xsl:variable name="is-notempty-table" select="max(count(thead/row/entry))" />

Это то, что count(thead/row/entry) будет возвращать только одно значение;а именно количество всех entry узлов в thead.(И он вернет 3, а не 0).Если вы хотите найти максимальное число узлов entry для строк в пределах thead, вы хотите получить следующее выражение:

<xsl:variable name="is-notempty-table" select="max(thead/row/count(entry))" />

Или для tbody

<xsl:variable name="is-notempty-table" select="max(tbody/row/count(entry))" />

Или, чтобы проверить всю таблицу ...

<xsl:variable name="is-notempty-table" select="max(*/row/count(entry))" />

Кроме того, использование имени переменной is-notempty-table предполагает, что вы просто хотите проверить, есть ли в таблице entry узлы?Если это так, вы можете просто сделать это ...

<xsl:variable name="is-notempty-table" select="*/row/entry" />
<xsl:if test="$is-notempty-table">Table is not empty</xsl:if>
0 голосов
/ 04 июня 2019

Внутри <xsl:template match="table"> кажется, что вы хотите вычислить max(*/row/count(entry)) (если нет других дочерних элементов для элемента таблицы) или, возможно, max((thead|tbody)/row/count(entry)), если вы ожидаете другие элементы, такие как tfoot.

Оба выраженияпредположим, XSLT / XPath 2 или более поздней версии.

...