Умова "Один до багатьох"

Написано Анатолій
Оновлено 5 місяців тому

Цей тип умови можна застосовувати ЛИШЕ до таблиці всередині документа. Умова повинна повертати "true" або "false" для кожного рядка таблиці у наступному форматі:

<result>
  <rows>
    <row index='0'>true<row>
    <row index='1'>false<row>
    <row index='2'>false<row>
    <row index='3'>true<row>
  </rows>
</result>

Атрибут index повинен співпадати з атрибутом index у ноді "fieldset". Приклад XSLT з умовою:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
        <result>
            <rows>
                <xsl:for-each select="envelope/documents/document[@id='document_id']/fieldgroup[@name='table_name']/fieldset">
                    <row index="{@index}">
                        <xsl:choose>
                            <xsl:when test="field[@name='field_name']='Yes'">
                              true
                            </xsl:when>
                            <xsl:otherwise>
                                false
                            </xsl:otherwise>
                        </xsl:choose>
                    </row>
                </xsl:for-each>
            </rows>
        </result>
    </xsl:template>
</xsl:stylesheet>

Для кожного рядка, де result = "true", буде створено новий конверт. Для того, щоб надати "xslt" карті правильний індекс рядка, цю карту потрібно відповідним чином модифікувати. Необхідно додати наступний параметр:

<xsl:param name="row_index"/>

А використовувати його можна наступним чином:

<field name="field_name">
    <xsl:value-of select="envelope/documents/document[@id='document_id']/fieldgroup[@name='table_name']/
        fieldset[@index=$row_index]/field[@name='field_name']/@value"/>
</field>
Чи була наша стаття корисною?