powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Как в xslt вызвать javascript'овую функцию?
12 сообщений из 12, страница 1 из 1
Как в xslt вызвать javascript'овую функцию?
    #34196861
NNika
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хочу, например на onClick вызвать простую javascript'овую функцию, которая описана в теге <script>. При нажатии происходит ошибка:
Код: plaintext
1.
Предполагается наличие объекта
.
В чем проблема не знаю, вроде бы всё просто.
...
Рейтинг: 0 / 0
Как в xslt вызвать javascript'овую функцию?
    #34198512
NNika
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот простецкий код:
Код: 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:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:decimal-format decimal-separator="." grouping-separator=' ' />
  <xsl:output method="html"/>
  <xsl:template match="/">
    <html>
      <head>
        <script language="JavaScript">
          <![CDATA[
	function expand()
		{
            alert("sssssss");
		}]]>
        </script>
        <title>testxml</title>
        <link href="pogr.css" rel="stylesheet" media="screen" /> 
      </head>
      <body style="background-color:#316AC5">
        <table  width="100%" cellspacing="1">
          <tr>
            <td nowrap="yes">
              <xsl:apply-templates select="child::*"/>
            </td>
          </tr>
        </table>
        <a style="vertical-align:bottom;position: relative; bottom: 2; z-index: 1;cursor:hand;" onselectstart="return false">
          <xsl:attribute name="onclick">
          expand()
          </xsl:attribute>
          ffffffffffff</a>
      </body>
    </html>
  </xsl:template>
</xsl:stylesheet>


При нажатии на ссылку происходит ошибка:
Код: plaintext
Предполагается наличие объекта
, и указывает на строку с тэгом <link>, если убрать тэг <link>, то будет указывать на тэг </title>.
Не могу понять в чем дело. Помогитееееееееееее!!!!!!!
...
Рейтинг: 0 / 0
Как в xslt вызвать javascript'овую функцию?
    #34199348
Фотография michael R
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
какой парсер
если microsoft то используй
<msxsl:script>

на другие парсеры есть свои расширения

alert в xslt работать не будет

обратить внимание на простанство имён


пример перевода в Unicode-символы

<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:ext="urn:extension-functions"
exclude-result-prefixes="msxsl ext">

<xsl:output method="html" encoding="UTF-8" />

<msxsl:script
language="JavaScript"
implements-prefix="ext">
<![CDATA[
function convertToUnicode(unicode)
{
var tstr = unicode
var bstr = '';
for(i=0; i < tstr.length; i++)
{
bstr += '' + tstr.charCodeAt(i) + ';';
}
return (bstr);
}
]]>
</msxsl:script>


<xsl:template match=".">
<xsl:value-of select="ext:convertToUnicode(string('привет'))" disable-output-escaping="yes" />
</xsl:template>

</xsl:stylesheet>
...
Рейтинг: 0 / 0
Как в xslt вызвать javascript'овую функцию?
    #34199890
NNika
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А может ли такая ошибка возникнуть, если xml-файл закачивать асинхронно?
есть такой asp-файл, в котором я асинхронно закачиваю xml, накладываю xsl и вывожу результат
Код: 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.
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.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
    <title>Суточный отчет</title>
<script >

function onloadOWC(url, element_id, url_xsl )
	        { 
	         var objXML
	         
	          objXML = false;
	         
   	            if(window.XMLHttpRequest) 
		            {
		               objXML = new XMLHttpRequest();
		               
		                if (objXML.overrideMimeType ||objXML2.overrideMimeType) 
			                {
			                    objXML.overrideMimeType('text/xml');
                            }
	                 } 
	  	           else if (window.ActiveXObject)  // IE
			        { 
                      try 
                         {
                           objXML = new ActiveXObject("Microsoft.XMLHTTP");
                             var objXSLT = new ActiveXObject('Microsoft.XMLDOM');
                         }
                      catch (e) 
                         {
                           try {
                                 objXML = new ActiveXObject("Microsoft.XMLHTTP");
                                 var objXSLT = new ActiveXObject('Microsoft.XMLDOM');
                                }
                            catch (e) {}
                           }
                     }
			       if (!objXML) 
			         {
                       alert('Giving up :( Cannot create an XMLHTTP instance');
                       return false;
                     }
                    objXML.onreadystatechange = function()
                	  { 
		                if(objXML.readyState ==  4 )
			        	 {
			              if(objXML.status ==  200 )
			    	         {  
			    	           var objResTree=document.getElementById(element_id);
			    	           objXSLT.async=false;
			    	            objXSLT.load(url_xsl);
			    	            objResTree.innerHTML=objXML.responseXML.transformNode(objXSLT);
		    		         } 
			                 else	
				             {
				               alert( "Невозможно создать объект");
				             }	
			               }                                    
			       	  };                                     
                   objXML.open("GET", url, true); 
                   objXML.send(null);
        }                                                     
function Date ()
     {
      <%  Dim strDate
          strDate = Request.QueryString("date") 
          if (strDate="") then
          dim y 
          dim strDay
          dim strMon
          dim strYear
          y = Now
               strDay=Mid(y, 1 , 2 )
               strMon=Mid(y, 4 , 2 )
               strYear=Mid(y, 7 , 4 )
          strDate=strYear+ strMon+strDay
          end if
       %>
       var date="<%=strDate%>";
       
   return (date);  
     }
  function Station()
     {
      <%  Dim strStation
          strStation = Request.QueryString("station") 
         if(strStation="") then
           strStation="801208"
           end if
       %>
       var station="<%=strStation%>";
       
   return (station);  
     }
     function load()
  {
  }
    </script>
</head>
<body onload="onloadOWC('pgr_dor.xml?date='+Date()+'&station='+Station(),'pt2','sum.xsl');">
<div id="pt" > 
	

 </div>
 <div > <table border="1"  style="border-collapse: collapse ;" bordercolor="000000" >
			<tr>
         <td  rowspan="3" style="width: 150px" class=""  align="center" >
          <p align="center">Наименование грузоотправителя</p></td>
        <td  rowspan="3" align="center" width="180px">Род груза</td>
        <td colspan="9" bgcolor="#C0C0C0">
           <p align="center"><b>Погрузка</b></p></td>
       </tr>
       <tr>
         <td rowspan="2" width="103px">
           <p align="center" >Един. измерен.</p></td>
         <td colspan="3">
           <p align="center">План</p></td>
         <td  colspan="2">
           <p align="center">Выполнение</p></td>
         <td  colspan="3" >
          <p align="center" >Результат +/-</p></td>
        </tr>
        <tr>
          <td width="60px">суточн</td>
          <td width="60px">нараст</td>
          <td width="60px">месячн</td>
          <td width="60px">за сутки</td>
          <td width="60px">нараст</td>
          <td width="60px">за сутки</td>
          <td width="75px" >нараст.</td>
          <td width="80px">к общемес</td>
       </tr>
   	</table></div>
<div id="pt2" > </div>
<div id="pt3" > </div>
</body>
</html>
michael R alert в xslt работать не будет
Если записать вот так:
Код: plaintext
1.
2.
3.
4.
5.
 <a style="vertical-align:bottom;position: relative; bottom: 2; z-index: 1;cursor:hand;" onselectstart="return false">
          <xsl:attribute name="onclick">
         alert("ляля");
          </xsl:attribute>
          ffffffffffff</a>
, то alert сработает.
Я пробовала наложить этот шаблон, указав его в самом xml-файле, и загрузить сам xml-файл.
В этом случае скрипт выполнился.
...
Рейтинг: 0 / 0
Как в xslt вызвать javascript'овую функцию?
    #34206803
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
содержимое тега script не компилируется, если ты его импортируешь через innerHTML
...
Рейтинг: 0 / 0
Как в xslt вызвать javascript'овую функцию?
    #34207569
NNika
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А если импортировать через document.write(), то работает через раз (но скрипт работает).
Допустим, я хочу загрузить 3 xml-файла, а загружается только один или вообще никакой не загружается.
Импортирую вот так:
Код: plaintext
1.
2.
3.
4.
5.
var objResTree=document.getElementById(element_id);
             objXSLT.async=false;
             objXSLT.load(url_xsl);
             objResTree=objXML.responseXML.transformNode(objXSLT);
             document.write(objResTree);
...
Рейтинг: 0 / 0
Как в xslt вызвать javascript'овую функцию?
    #34269922
Psix7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
michael Rкакой парсер
если microsoft то используй
<msxsl:script>


Michael,
а вот почему такое не работает?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
<?xml version="1.0" encoding="windows-1251"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xmlns:msxsl="urn:schemas-microsoft-com:xslt"
	xmlns:ext="urn:extension-functions"
	exclude-result-prefixes="msxsl ext">
<xsl:output encoding="windows-1251"/>
<xsl:template match="/">
<html>
	<body>
	<xsl:value-of select="ext:vvvlang()"  /> 
	</body>
</html>

</xsl:template>

<msxsl:script language="JavaScript" implements-prefix="ext">
	<![CDATA[
		function vvvlang()
			{  return navigator.userLanguage ;   } 
	]]>
</msxsl:script>
</xsl:stylesheet>

ошибка такая:
Ошибка выполнения Microsoft JScript "navigator" - определение отсутствует line = 3, col = 6

Просто в html такая функция в скрипте работает... Как такое исправить?
...
Рейтинг: 0 / 0
Как в xslt вызвать javascript'овую функцию?
    #34271747
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хслт обрабатывается хслт-процессором, который ничего не знает о приложении, которое им пользуется, допустимые функции хслт-процессора можно почерпнуть из справки
...
Рейтинг: 0 / 0
Как в xslt вызвать javascript'овую функцию?
    #34272148
Psix7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maXmoхслт обрабатывается хслт-процессором, который ничего не знает о приложении, которое им пользуется, допустимые функции хслт-процессора можно почерпнуть из справки

Вроде как известно приложение, тег то вот такой <msxsl:script> и пространство имен другое.
а в справочниках <xsl:xxx> допутимых функциях, языка нет, поэтому и пытаюсь через скрипт.
Да не xslt ругается, а javascript. Ему похоже надо другую функцию подсунуть или по другому ее записать. В конце концов устроит даже не язык броузера, а язык операционки или лучше регион.
...
Рейтинг: 0 / 0
Как в xslt вызвать javascript'овую функцию?
    #34272364
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Psix7Да не xslt ругается, а javascript.функции скрипту поставлет хслт-процессор и если он их не поставляет, то интерпретатор жаваскрипта ессно ругается.
...
Рейтинг: 0 / 0
Как в xslt вызвать javascript'овую функцию?
    #34273392
Psix7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
и как тогда пример от "michael R" работает?
там тоже есть вещи не совместимые с xsl...
хотя бы вот это: tstr.charCodeAt(i)
...
Рейтинг: 0 / 0
Как в xslt вызвать javascript'овую функцию?
    #34275264
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это стандартная функция работы со строками, реализуется всеми жаваскрипт-интерпретаторами согласно стандарту ECMA.
Можешь попытаться чего-нить добиться от toLocaleString.
О… идея! Попробуй создать какой-нить ActiveXObject и через него что-нить вытянуть.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Как в xslt вызвать javascript'овую функцию?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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