powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / как определить path до нодов
5 сообщений из 5, страница 1 из 1
как определить path до нодов
    #34642384
Guest9999999999999
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
люди, как составить шаблон для отметки чекбоксов из определенного количества?

есть список всех чекбоксов:

<hobbi>
<item>1</item>
</hobbi>
<hobbi>
<item>2</item>
</hobbi>
<hobbi>
<item>3</item>
</hobbi>
<hobbi>
<item>4</item>
</hobbi>

и там же список тех чекбоксов, которые должны быть отмеченны, для каждего юзверя:

<user>
<check>
<item>1</item>
</check>
<check>
<item>3</item>
</check>
</user>

<user>
<check>
<item>2</item>
</check>
<check>
<item>4</item>
</check>
</user>

<user>
<check>
<item>3</item>
</check>
</user>

список всех чекбоксов выводится на одной странице для каждого юзера, где для каждого отмеченны соответствующие хоби юзеру, я сделал шаблон user в котором находится for-each //hobbi проблема в том, что из-за обращения к элементу hobbi и написании двух слешов указатель уходит из самого шаблона user в корень, а как его сравнивать с check/item который какраз находится в определенном user непонимаю, есть решение вообще?:)

вот пример xsl:

<?xml version="1.0" encoding="windows-1251"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="page">
<form method="post">
<table border="1">
<xsl:apply-templates select="//user"/>
<tr>
<td colspan="2" align="right"><input type="submit" value="Изменить"/></td>
</tr>
</table>
</form>
</xsl:template>

<xsl:template match="user">
<tr>
<td>
<xsl:for-each select="//hobi">

<!-- неработает -->
<xsl:if test="item=check/item">
checked
</xsl:if>
<!-- /неработает -->

</xsl:for-each>
</td>
</tr>
</xsl:template>
</xsl:stylesheet>
...
Рейтинг: 0 / 0
как определить path до нодов
    #34643312
qu-qu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Guest9999999999999... непонимаю, есть решение вообще?:)
Решение, безусловно, есть... (иначе, зачем бы умные люди придумывали такой xsl, который бы "спотыкался" на простейших задачах).
Можно попробовать так (один из немногих случаев в применении xslt, где оправдано использование for-each и variable, .т.к. по ходу обработки меняется контекст узла):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
<xsl:template match="user">
<tr>
<td>
<xsl:variable name="usernode" select="." />
<xsl:for-each select="//hobbi">
<xsl:variable name="itemno" select="./item" />
<xsl:if test="$usernode/check[item=$itemno]">checked</xsl:if>
</xsl:for-each>
</td>
</tr>
</xsl:template>
...
Рейтинг: 0 / 0
как определить path до нодов
    #34643351
qu-qu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qu-qu... один из немногих случаев в применении xslt, где оправдано использование for-each и variable, .т.к. по ходу обработки меняется контекст узла)
Кстати, одну переменную ($itemno) можно все-таки сократить (если сравнивать не в предикатах, а по контекстному узлу):
Код: plaintext
1.
2.
...
<xsl:if test="$usernode/check/item=./item">checked</xsl:if>
...
...
Рейтинг: 0 / 0
как определить path до нодов
    #34645125
Guest9999999999999
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
работает, не думал что обозначение пути можно заложить в переменную, очень красивый подход, спасибо:)
...
Рейтинг: 0 / 0
как определить path до нодов
    #34646676
qu-qu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Guest9999999999999работает, не думал что обозначение пути можно заложить в переменную, очень красивый подход, спасибо:)
Не за что, только не надо путать понятия с самого начала изучения XSLT, если что-то для вас похоже на "обозначение пути" - лучше сразу посмотреть в спецификацию по инструкции "<xsl:variable ...", чтобы потом не было "мучительно больно", когда оно поведет себя не так, как вы себе представляли...

З.Ы. хинт 1 - то, что похоже на "обозначение пути", на самом деле является "набором узлов" (nodeset), т.е. "объектом", если хотите, состоящим из одного узла (именно того элемента user, который обрабатывается текущим шаблоном) и именно поэтому к нему можно применять XPath-выражения.
З.З.Ы. хинт 2 - "наборы узлов" (nodesets) не единственный тип, который может "возвращать" инструкция "<xsl:variable ...".
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / как определить path до нодов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]