powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Нужен совет.какую технологию использовать
13 сообщений из 13, страница 1 из 1
Нужен совет.какую технологию использовать
    #38996996
Альтаир
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день. С xslt схемами знакома. Но появилась необходимость разработать xslt-шаблон с контролами: кнопка, выпадающий список. На сколько я знаю, что средствами xslt это сделать невозможно. Или я ошибаюсь? Может быть использовать какую-то другую технологию? И в какую сторону копать?
...
Рейтинг: 0 / 0
Нужен совет.какую технологию использовать
    #38997004
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почему невозможно? В Вашем распоряжении весь HTML
...
Рейтинг: 0 / 0
Нужен совет.какую технологию использовать
    #38997019
Альтаир
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
не очень понимаю.как с помощью xslt работать с кнопкой.чтобы в зависимости от нажатия. что-то появлялось и убиралось на странице. может быть нужно смотреть в сторону jQuery какого-нибудь?
...
Рейтинг: 0 / 0
Нужен совет.какую технологию использовать
    #38997047
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как сформировать из XML при помощи XSL HTML страницу понимаете? Что мешает в это страницу добавить немного JavaScript?

Вот небольшой кусок из моего проекта
Код: xml
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.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
  <xsl:template match="pln:FreqAssigments">
    <xsl:variable name="assigment_names">
      <xsl:apply-templates select="pln:FREQ_ASSIGMENT" mode="names"/>
    </xsl:variable>
    <xsl:if test="$assigment_names != ''">
      <script type="text/javascript">
        <xsl:text disable-output-escaping="yes">// &lt;![CDATA[
        <![CDATA[
        function getStylesheetName(aXML){
          for (var i = aXML.childNodes.length - 1; i >= 0; i--) {
            var node = aXML.childNodes.item(i);
            if ((node.nodeType == 7) && (node.nodeName == 'xml-stylesheet')) {
              var reStyle = new RegExp("^.*?\\bhref\\s*=\\s*([\'\"])(.*?)\\1.*$", '');
              if (reStyle.test(node.data)) {
                return node.data.replace(reStyle, 
                  function($0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
                    return $2;
                  }
                );
              }
              return;
            }
          }
          return;
        }
        
        function transformXML(aStrm) {
          var xml = new ActiveXObject("MSXML2.FreeThreadedDOMDocument.6.0");
          if (!xml.load(aStrm))
            throw new Error("Load XML failed: " + xml.parseError.reason);
          var styleName = getStylesheetName(xml);
          if (!styleName)
            throw new Error("Can\'t find stylesheet reference");
          var xsl = new ActiveXObject("MSXML2.FreeThreadedDOMDocument.6.0");
          xsl.setProperty("ResolveExternals", true);
          xsl.setProperty("AllowXsltScript", true);
          xsl.setProperty("ProhibitDTD", false);
          xsl.validateOnParse = false;
          
          if (!xsl.load(styleName))
            throw new Error("Load XSL failed: " + xsl.parseError.reason);
          
          var xslTemplate = new ActiveXObject("Msxml2.XSLTemplate.6.0");
          xslTemplate.stylesheet = xsl.documentElement;
          var xslProc = xslTemplate.createProcessor();
          xslProc.addParameter("skipHeaders", 1);
          xslProc.input = xml;
          if (!xslProc.transform())
            throw new Error('Transform failed');
          return xslProc.output;
        }
        
        function showFrqAssigment(aBtn, aNames) {
          var strmObj = new ActiveXObject('rsXMLObj.rsDispStream');
          var base64Obj = new ActiveXObject('rsXMLObj.rsBase64');
          for (var i = 0; i < aNames.length; i++) {
            var data = document.getElementById(aNames[i]);
            strmObj.Clear();
            base64Obj.Decode(data.innerText, strmObj);
            strmObj.Decompress(0);
            strmObj.Seek(0, 0);
            data.innerHTML = transformXML(strmObj);
            data.style.display = "block";
          }
          aBtn.style.display = "none";
        }
        ]]>
        // ]]&gt;
        </xsl:text>
      </script>
      <xsl:variable name="array_names" select="concat(
          'new Array(',
          substring($assigment_names, 1, string-length($assigment_names) - 2),
          ')')"/>
      <input type="button" class="topMargin" onclick="showFrqAssigment(this, {$array_names})" value="Показати облікові дані"/>
      <xsl:apply-templates select="pln:FREQ_ASSIGMENT"/>
    </xsl:if>
  </xsl:template>


Да, с jQuery будет немного проще, но можно и без него
...
Рейтинг: 0 / 0
Нужен совет.какую технологию использовать
    #38997049
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CDATA уехала. Вот еще раз
Код: xml
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.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
        function getStylesheetName(aXML){
          for (var i = aXML.childNodes.length - 1; i >= 0; i--) {
            var node = aXML.childNodes.item(i);
            if ((node.nodeType == 7) && (node.nodeName == 'xml-stylesheet')) {
              var reStyle = new RegExp("^.*?\\bhref\\s*=\\s*([\'\"])(.*?)\\1.*$", '');
              if (reStyle.test(node.data)) {
                return node.data.replace(reStyle, 
                  function($0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
                    return $2;
                  }
                );
              }
              return;
            }
          }
          return;
        }
        
        function transformXML(aStrm) {
          var xml = new ActiveXObject("MSXML2.FreeThreadedDOMDocument.6.0");
          if (!xml.load(aStrm))
            throw new Error("Load XML failed: " + xml.parseError.reason);
          var styleName = getStylesheetName(xml);
          if (!styleName)
            throw new Error("Can\'t find stylesheet reference");
          var xsl = new ActiveXObject("MSXML2.FreeThreadedDOMDocument.6.0");
          xsl.setProperty("ResolveExternals", true);
          xsl.setProperty("AllowXsltScript", true);
          xsl.setProperty("ProhibitDTD", false);
          xsl.validateOnParse = false;
          
          if (!xsl.load(styleName))
            throw new Error("Load XSL failed: " + xsl.parseError.reason);
          
          var xslTemplate = new ActiveXObject("Msxml2.XSLTemplate.6.0");
          xslTemplate.stylesheet = xsl.documentElement;
          var xslProc = xslTemplate.createProcessor();
          xslProc.addParameter("skipHeaders", 1);
          xslProc.input = xml;
          if (!xslProc.transform())
            throw new Error('Transform failed');
          return xslProc.output;
        }
        
        function showFrqAssigment(aBtn, aNames) {
          var strmObj = new ActiveXObject('rsXMLObj.rsDispStream');
          var base64Obj = new ActiveXObject('rsXMLObj.rsBase64');
          for (var i = 0; i < aNames.length; i++) {
            var data = document.getElementById(aNames[i]);
            strmObj.Clear();
            base64Obj.Decode(data.innerText, strmObj);
            strmObj.Decompress(0);
            strmObj.Seek(0, 0);
            data.innerHTML = transformXML(strmObj);
            data.style.display = "block";
          }
          aBtn.style.display = "none";
        }

...
Рейтинг: 0 / 0
Нужен совет.какую технологию использовать
    #38997050
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, что же за фигня
Код: javascript
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.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
        function getStylesheetName(aXML){
          for (var i = aXML.childNodes.length - 1; i >= 0; i--) {
            var node = aXML.childNodes.item(i);
            if ((node.nodeType == 7) && (node.nodeName == 'xml-stylesheet')) {
              var reStyle = new RegExp("^.*?\\bhref\\s*=\\s*([\'\"])(.*?)\\1.*$", '');
              if (reStyle.test(node.data)) {
                return node.data.replace(reStyle, 
                  function($0, $1, $2, $3, $4, $5, $6, $7, $8, $9) {
                    return $2;
                  }
                );
              }
              return;
            }
          }
          return;
        }
        
        function transformXML(aStrm) {
          var xml = new ActiveXObject("MSXML2.FreeThreadedDOMDocument.6.0");
          if (!xml.load(aStrm))
            throw new Error("Load XML failed: " + xml.parseError.reason);
          var styleName = getStylesheetName(xml);
          if (!styleName)
            throw new Error("Can\'t find stylesheet reference");
          var xsl = new ActiveXObject("MSXML2.FreeThreadedDOMDocument.6.0");
          xsl.setProperty("ResolveExternals", true);
          xsl.setProperty("AllowXsltScript", true);
          xsl.setProperty("ProhibitDTD", false);
          xsl.validateOnParse = false;
          
          if (!xsl.load(styleName))
            throw new Error("Load XSL failed: " + xsl.parseError.reason);
          
          var xslTemplate = new ActiveXObject("Msxml2.XSLTemplate.6.0");
          xslTemplate.stylesheet = xsl.documentElement;
          var xslProc = xslTemplate.createProcessor();
          xslProc.addParameter("skipHeaders", 1);
          xslProc.input = xml;
          if (!xslProc.transform())
            throw new Error('Transform failed');
          return xslProc.output;
        }
        
        function showFrqAssigment(aBtn, aNames) {
          var strmObj = new ActiveXObject('rsXMLObj.rsDispStream');
          var base64Obj = new ActiveXObject('rsXMLObj.rsBase64');
          for (var i = 0; i < aNames.length; i++) {
            var data = document.getElementById(aNames[i]);
            strmObj.Clear();
            base64Obj.Decode(data.innerText, strmObj);
            strmObj.Decompress(0);
            strmObj.Seek(0, 0);
            data.innerHTML = transformXML(strmObj);
            data.style.display = "block";
          }
          aBtn.style.display = "none";
        }

...
Рейтинг: 0 / 0
Нужен совет.какую технологию использовать
    #39001572
Альтаир
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо. принцип ясен. буду пробовать
...
Рейтинг: 0 / 0
Нужен совет.какую технологию использовать
    #39009123
Альтаир
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Оказалось, что не ясен принцып..
Можно ещё раз. Чтобы использовать только xslt со вставками java. Есть кнопка и элемент (например таблица с id="mytable"). Что нужно записать в onclick, чтобы что-то происходило с таблицей, например, чтобы она скрывалась?
...
Рейтинг: 0 / 0
Нужен совет.какую технологию использовать
    #39009211
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АльтаирОказалось, что не ясен принцып..
Можно ещё раз. Чтобы использовать только xslt со вставками java. Есть кнопка и элемент (например таблица с id="mytable"). Что нужно записать в onclick, чтобы что-то происходило с таблицей, например, чтобы она скрывалась?У вас уже есть результат хотя бы с кнопкой и таблицей, которая не скрывается?
...
Рейтинг: 0 / 0
Нужен совет.какую технологию использовать
    #39009359
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Альтаирсо вставками javajavascript. Java и Javascript - это как лошадь и зебра. Вроде и чем-то похожи, но абсолютно разные
АльтаирЕсть кнопка и элемент (например таблица с id="mytable"). Что нужно записать в onclick, чтобы что-то происходило с таблицей, например, чтобы она скрывалась?
Код: javascript
1.
document.getElementById('mytable').style.display = 'none';
...
Рейтинг: 0 / 0
Нужен совет.какую технологию использовать
    #39009380
Альтаир
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо. не получалось функцию вставить в правильное место. В одну строку сразу получилось. Но решила сделать так:
<a href="javascript:void(0)" onclick="showHide('my_id')">Скрыть/Показать элемент</a><br/><br/>
<div id="my_id" style="display: none;">
текст
</div>
...
Рейтинг: 0 / 0
Нужен совет.какую технологию использовать
    #39009387
Альтаир
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
осталось только разобраться, как position использовать в скрипте
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
<xsl:variable name="krit" select="Позиция" />
<xsl:for-each select="$krit">
<xsl:variable name="poz" select="position()" />
		 <a href="javascript:void(0)" onclick="showHide('$poz')">Позиция № <xsl:value-of select="@Номер"/>.<xsl:value-of select="@Наименование"/> </a><br/><br/>
        <div id="$poz" style="display: none;">
           <xsl:value-of select="Описание"/>
		   <xsl:value-of select="$poz"/>
        </div>




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


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