powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Установить переменную по значению аттрибута
13 сообщений из 13, страница 1 из 1
Установить переменную по значению аттрибута
    #35934897
NeroBrain
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
XML:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
<target name="ЦПС Игол">
  <group name="Резервуары">
    <item name="Уровень нефти, м">
      <tag name="CPSIgol_A_6_3" comment="P1" unit="м" vartype="a"/>
      <tag name="CPSIgol_A_6_4" comment="P2" unit="м" vartype="d"/>
      <tag name="CPSIgol_A_6_5" comment="P3" unit="м"/>
    </item>
  </group>
</target>
XSLT(Часть):
Код: plaintext
1.
2.
3.
4.
5.
<xsl:for-each select="tag">
  <tr>
    <td class="Parameter"><xsl:value-of select="string(@comment)"/>,<xsl:value-of select="string(@unit)"/></td>
    <td class="Value"><div id="{string(@name)}" type="{string(@typevar)}"> </div></td>
  </tr>
</xsl:for-each><!--<xsl:for-each select="tag">-->
Вопрос такой: Аттрибут @typevar является не обязательным. И при его отсутствии надо выставить дефолтовое значение. Если надо было работать с тегом или текстом, можно было использовать <xsl:if> или <xsl:choose>. Но в аттрибут тега( между скобок < >) врезаться нельзя. Может кто-то знает как оформить условный выбор чтобы получить что-то похожее на:
Код: plaintext
<xsl:variable name="typeDef" select="'a'"/><div id="{string(@name)}" type="{if exist(@typevar) then @typevar else &typeDef}"> </div>
PS
{if exist(@typevar) then @typevar else &typeDef} - уже пробовал. Ругнулось на -->then<-- хотя в одном из интернетав описывалась именно такая конструкция
...
Рейтинг: 0 / 0
Установить переменную по значению аттрибута
    #35935596
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
string(@typevar|$typeDef)
...
Рейтинг: 0 / 0
Установить переменную по значению аттрибута
    #35935667
NeroBrain
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тоже не работает :(
Результат:
Код: plaintext
1.
Выражение не возвращает узел DOM. {string(@typevar|-->$typeDef)<--}
...
Рейтинг: 0 / 0
Установить переменную по значению аттрибута
    #35935744
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тогда делай через if
...
Рейтинг: 0 / 0
Установить переменную по значению аттрибута
    #35937531
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
<xsl:variable name="typeDef" select="'a'"/>
<div id="{string(@name)}">
  <xsl:attribute name="type">
    <xsl:choose>
      <xsl:when test="@typevar">
        <xsl:value-of select="@typevar"/>
      </xsl:when>
      <xsl:otherwise>
        <xsl:value-of select="$typeDef"/>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:attribute>
</div>
...
Рейтинг: 0 / 0
Установить переменную по значению аттрибута
    #35937536
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Или можно так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
<xsl:variable name="typeDef" select="'a'"/>
<xsl:variable name="typeVar">
  <xsl:choose>
    <xsl:when test="@typevar">
      <xsl:value-of select="@typevar"/>
    </xsl:when>
    <xsl:otherwise>
      <xsl:value-of select="$typeDef"/>
    </xsl:otherwise>
  </xsl:choose>
<div id="{string(@name)}" type="{$typeVar}"></div>
[/quot]
...
Рейтинг: 0 / 0
Установить переменную по значению аттрибута
    #35938839
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
во, как надо
Код: plaintext
1.
<xsl:value-of select="@typevar"/>
<xsl:if test="not(@typevar)"><xsl:value-of select="$typeDef"/></xsl:if>
...
Рейтинг: 0 / 0
Установить переменную по значению аттрибута
    #35939937
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maXmoво, как надо
Код: plaintext
1.
<xsl:value-of select="@typevar"/>
<xsl:if test="not(@typevar)"><xsl:value-of select="$typeDef"/></xsl:if>

Да. Красиво.
...
Рейтинг: 0 / 0
Установить переменную по значению аттрибута
    #35940104
NeroBrain
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_maXmoво, как надо
Код: plaintext
1.
<xsl:value-of select="@typevar"/>
<xsl:if test="not(@typevar)"><xsl:value-of select="$typeDef"/></xsl:if>

Да. Красиво. Красиво, но неприменимо. Я же говорю, что мне требуеться именно условное присвоение в _переменную_. Просто, в значение атрибута можно записать только выражение по типу: "{'Выражение, &переменная или @Аттрибут'}". Пока что решение по индусски:
Код: plaintext
<div id="{string(@name)}" type="{substring(concat(@vartype,'a'),1,1)}"> </div>
Для односимвольного значения подходит но не более.
...
Рейтинг: 0 / 0
Установить переменную по значению аттрибута
    #35940106
NeroBrain
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Т.е. тут ключевой момент в том, что при открытом теге <DIV и открытой стороке type=" нельзя использовать новые теги или строки. Т.е. в спецификации XML(XHTML/HTML) основным правилом является обязательное закритие парных СКОБОК, КАВЫЧЕК и ТЕГОВ.
После текста <div type="писать только {Выражение}">или текст">
...
Рейтинг: 0 / 0
Установить переменную по значению аттрибута
    #35940111
NeroBrain
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maXmoво, как надо
Код: plaintext
1.
<xsl:value-of select="@typevar"/>
<xsl:if test="not(@typevar)"><xsl:value-of select="$typeDef"/></xsl:if>
Пришлось немного подшаманить, но твой вариант более универсален, да и правильнее :)
Код: plaintext
1.
2.
3.
4.
5.
6.
<xsl:text disable-output-escaping="yes">&lt;div id=&quot;</xsl:text>
<xsl:value-of select="string(@name)"/>
<xsl:text disable-output-escaping="yes">&quot; type=&quot;</xsl:text>
<xsl:variable name="typedef" select="'a'"/>
<xsl:value-of select="@typevar"/><xsl:if test="not(@typevar)"><xsl:value-of select="$typedef"/></xsl:if>
<xsl:text disable-output-escaping="yes">&quot;&gt;&# 160 ;&lt;/div&gt;</xsl:text>
Всем спасибо
...
Рейтинг: 0 / 0
Установить переменную по значению аттрибута
    #35940594
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мда. Ну да ладно.

С уважением, Vasilisk
...
Рейтинг: 0 / 0
Установить переменную по значению аттрибута
    #35941586
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
открой для себя xsl:attribute
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Установить переменную по значению аттрибута
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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