powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Получить в переменную название узла
3 сообщений из 3, страница 1 из 1
Получить в переменную название узла
    #37054653
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть примерно такая структура:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
<somenode>
    <dictionary1>
         <item>
              <someID> 1 </someID>
              <someNAME>test1</someNAME>
        </item>
        <item>...</item>
    </dictionary1>
    <всякая_всячина>...</всякая_всячина>
</somenode>
И шаблон:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
<xsl:template name="select">
  <xsl:param name="name"/><!--название поля-->
  <xsl:param name="node"/><!--название узла справочника ("dictionary1" например) -->
  <xsl:param name="val"/><!--выбранное значение-->
  <xsl:param name="vfld"/><!--поле с id — опционально-->
  <xsl:param name="dfld"/><!--поле с названием  — опционально-->

<!-- проблема -->
  <xsl:if test="not($vfld)">
    <xsl:variable name="vfld" select="ancestor::*//somenode/*[name()=$node]/*[1]/*[substring(name(), string-length(name())-2,2)='ID']/name()"/>
  </xsl:if>
  <xsl:if test="not($dfld)">
    <xsl:variable name="dfld" select="ancestor::*//somenode/*[name()=$node]/*[1]/*[contains(name(),'NAME')]/name()"/>
  </xsl:if>
<!-- /проблема -->

  <xsl:choose>
    <xsl:when test="ancestor::*//somenode/EDITABLE = '1'">
      <SELECT CLASS="pullDown">
        <xsl:attribute name="name"><xsl:value-of select="$name"/></xsl:attribute>
        <OPTION VALUE="0">--Выберите здесь--</OPTION>
        <xsl:for-each select="ancestor::*//somenode/*[name()=$node]/*">
          <option>
            <xsl:attribute name="value"><xsl:value-of select='*[name()=$vfld]'/></xsl:attribute>
            <xsl:if test='@SELECTED=1'><xsl:attribute name='selected'>true</xsl:attribute></xsl:if>
            <xsl:value-of select='*[name()=$dfld]'/>
          </option>
        </xsl:for-each>
      </SELECT>    
    </xsl:when>
    <xsl:otherwise>
      <xsl:value-of select="ancestor::*//somenode/*[name()=$node]/*/*[name()=$vfld][.=$val]/parent::*[name()=$dfld]"/>
    </xsl:otherwise>
  </xsl:choose>
</xsl:template>
В XML присутствуют данные объекта и справочники для селектов. Один и тот же xsl-шаблон планирую использовать и для отображения и для правки данных с помощью мини-шаблончиков с элементами редактирования.
Задача: при отсутствии значения в параметрах vfld и dfld найти узлы по принципу: название узла со значениями оканчивается на ID, название узла с подписями содержит NAME. Найденные названия присвоить переменным.
Проблема: парсер ругается на функцию name: "Expected end of expression: ... string-length(name())-2,2)='ID']/name-->(<--".
Как правильно?
...
Рейтинг: 0 / 0
Получить в переменную название узла
    #37054877
refreg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy,

В идею xpatha въехать не смог (:
это поможет?
Код: plaintext
<xsl:param name="vfld" select="name(ancestor::*//somenode/*[name()=$node]/*[1]/*[substring(name(), string-length(name(.))-2,2)='ID'])"/>
PS. Лучше работающий мини-пример давать. Вызов темплейта где?
...
Рейтинг: 0 / 0
Получить в переменную название узла
    #37055168
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если бы у меня был РАБОТАЮЩИЙ мини-пример, то и вопроса бы не было)) Проблема была в том, чтобы заставить его работать ВООБЩЕ. А чтобы работал КАК НАДО, это обычно проблем не представляет.

Однако помогло. Я просто неправильно использовал функцию. И насчет значения по умолчанию спасибо, пригодилось.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Получить в переменную название узла
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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