#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, но, похоже, у меня это уже работает 🙂