Группировка вложенного форматирования XSLT

#xml #xslt

#xml #xslt

Вопрос:

Я новичок в XSLT. У меня есть классическая страница ASP, которая извлекает XML-файл через пользовательский COM-объект. Вот структура файла:

первая строка содержит значения, относящиеся к году (тип аргумента =»1″), следующие 12 строк содержат данные за месяц (тип аргумента =»2″), и так далее в течение x лет. Результат, который мне нужно создать, — это HTML-таблица с элементами текстового поля, в которой я могу показывать / скрывать записи за месяц и выполнять некоторую проверку на стороне клиента на основе пользовательского ввода и XML-данных. Строки «год» (тип аргумента = «1») всегда видны и содержат знак » » в первой ячейке таблицы, чтобы показать / скрыть строки месяца (тип аргумента = «2»). Я уже создал функции Javascript для отображения / скрытия и проверки.

Мне нужна помощь в создании / форматировании файла XSLT. В конце концов, мне также нужно преобразовать номер месяца в описательное название месяца Thanx

 <row year="2016" type="1" euro="100000000.00"/>
<row year="2016" type="2" month="1"/>
<row year="2016" type="2" month="2"/>
<row year="2016" type="2" month="3"/>
<row year="2016" type="2" month="4"/>
<row year="2016" type="2" month="5"/>
<row year="2016" type="2" month="6"/>
<row year="2016" type="2" month="7" euro="1000234000.00"/>
<row year="2016" type="2" month="8"/>
<row year="2016" type="2" month="9"/>
<row year="2016" type="2" month="10"/>
<row year="2016" type="2" month="11"/>
<row year="2016" type="2" month="12"/>
<row year="2017" type="1" euro="199996993.00"/>
<row year="2017" type="2" month="1"/>
<row year="2017" type="2" month="2"/>
<row year="2017" type="2" month="3"/>
<row year="2017" type="2" month="4"/>
<row year="2017" type="2" month="5"/>
<row year="2017" type="2" month="6"/>
<row year="2017" type="2" month="7" euro="125000000.00"/>
<row year="2017" type="2" month="8"/>
<row year="2017" type="2" month="9"/>
<row year="2017" type="2" month="10"/>
<row year="2017" type="2" month="11"/>
<row year="2017" type="2" month="12"/>
  

Вот код, который я использую, не уверен, что это лучший способ, но, похоже, он работает до сих пор

 <xsl:for-each select="row">
    <xsl:choose>
        <xsl:when test="@type='1'>
        <tr>
            <td align="center">
                <xsl:element name="a">
                <xsl:attribute name="href">javascript:ToggleYear(<xsl:value-of select="@year"/>)</xsl:attribute>
                <xsl:attribute name="id">a_<xsl:value-of select="@year"/></xsl:attribute>
                <xsl:text> </xsl:text>
                </xsl:element>
            </td>
            <td>
                ...
            </td>
        </tr>
        </xsl:when>
    </xsl:choose>

    <xsl:if test="@type = 2">
        <xsl:element name="tr">
        <xsl:attribute name="style">display:none</xsl:attribute>
        <xsl:attribute name="id"><xsl:value-of select="@year"/>_H_<xsl:value-of select="@month"/></xsl:attribute>

            <td><xsl:text disable-output-escaping="yes">amp;amp;</xsl:text>nbsp;</td>
            <td>
                ...
            </td>
        </xsl:element>
    </xsl:if>

</xsl:for-each>
  

Комментарии:

1. Добро пожаловать в SO 🙂 Довольно широкий вопрос, я думаю, может быть, вы отредактируете его, показав код, который у вас уже есть.

2. Спасибо Стефан, я обновил код

3. Пожалуйста, покажите нам ожидаемый результат HTML.

4. Также, пожалуйста, включите корневой тег в XML. Очень важно, особенно если оно использует пространства имен.

5. нет, я не использую пространства имен. Документы xml имеют разные узлы, поскольку содержат как входные, так и выходные данные. Используется ли он для отправки параметров в хранимую процедуру, а также содержит возвращаемые данные для вывода

Ответ №1:

ОБНОВЛЕНИЕ: приведенный выше xslt работает, вот результат HTML, который я создал. Я пока оставлю это так.

PS Теперь мне нужно создать некоторую проверку JS на стороне клиента, чтобы сравнить выходные данные и вводимые пользователем данные и отправить обратно данные через JS -> ASP -> XML -> COM -> SQL Server, но, похоже, у меня это уже работает 🙂

вывод HTML