Гость
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Нужен совет.какую технологию использовать / 13 сообщений из 13, страница 1 из 1
01.07.2015, 15:39
    #38996996
Альтаир
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен совет.какую технологию использовать
Добрый день. С xslt схемами знакома. Но появилась необходимость разработать xslt-шаблон с контролами: кнопка, выпадающий список. На сколько я знаю, что средствами xslt это сделать невозможно. Или я ошибаюсь? Может быть использовать какую-то другую технологию? И в какую сторону копать?
...
Рейтинг: 0 / 0
01.07.2015, 15:51
    #38997004
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен совет.какую технологию использовать
Почему невозможно? В Вашем распоряжении весь HTML
...
Рейтинг: 0 / 0
01.07.2015, 16:08
    #38997019
Альтаир
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен совет.какую технологию использовать
не очень понимаю.как с помощью xslt работать с кнопкой.чтобы в зависимости от нажатия. что-то появлялось и убиралось на странице. может быть нужно смотреть в сторону jQuery какого-нибудь?
...
Рейтинг: 0 / 0
01.07.2015, 16:25
    #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
01.07.2015, 16:27
    #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
01.07.2015, 16:28
    #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
07.07.2015, 16:53
    #39001572
Альтаир
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен совет.какую технологию использовать
Спасибо. принцип ясен. буду пробовать
...
Рейтинг: 0 / 0
16.07.2015, 16:54
    #39009123
Альтаир
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен совет.какую технологию использовать
Оказалось, что не ясен принцып..
Можно ещё раз. Чтобы использовать только xslt со вставками java. Есть кнопка и элемент (например таблица с id="mytable"). Что нужно записать в onclick, чтобы что-то происходило с таблицей, например, чтобы она скрывалась?
...
Рейтинг: 0 / 0
16.07.2015, 18:09
    #39009211
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен совет.какую технологию использовать
АльтаирОказалось, что не ясен принцып..
Можно ещё раз. Чтобы использовать только xslt со вставками java. Есть кнопка и элемент (например таблица с id="mytable"). Что нужно записать в onclick, чтобы что-то происходило с таблицей, например, чтобы она скрывалась?У вас уже есть результат хотя бы с кнопкой и таблицей, которая не скрывается?
...
Рейтинг: 0 / 0
16.07.2015, 23:09
    #39009359
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен совет.какую технологию использовать
Альтаирсо вставками javajavascript. Java и Javascript - это как лошадь и зебра. Вроде и чем-то похожи, но абсолютно разные
АльтаирЕсть кнопка и элемент (например таблица с id="mytable"). Что нужно записать в onclick, чтобы что-то происходило с таблицей, например, чтобы она скрывалась?
Код: javascript
1.
document.getElementById('mytable').style.display = 'none';
...
Рейтинг: 0 / 0
17.07.2015, 00:01
    #39009380
Альтаир
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен совет.какую технологию использовать
спасибо. не получалось функцию вставить в правильное место. В одну строку сразу получилось. Но решила сделать так:
<a href="javascript:void(0)" onclick="showHide('my_id')">Скрыть/Показать элемент</a><br/><br/>
<div id="my_id" style="display: none;">
текст
</div>
...
Рейтинг: 0 / 0
17.07.2015, 00:26
    #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
17.07.2015, 07:28
    #39009428
Альтаир
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен совет.какую технологию использовать
Всё получилось с фигурными скобками. ))
...
Рейтинг: 0 / 0
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Нужен совет.какую технологию использовать / 13 сообщений из 13, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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