Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 30.03.2009, 13:58
Аспирант
Отправить личное сообщение для artwalek Посмотреть профиль Найти все сообщения от artwalek
 
Регистрация: 11.12.2008
Сообщений: 44

Использование & в XSLT файлах
В неком well-formed шаблоне хочу вызвать AJAX-функцию разбора XML на клиенте.
Вызываю так:
<script language="javascript" type="text/javascript">document.write(SimpleTransformXML('default.asp?ID=46&RubID=429', 'news.xsl'));</script>


Не забываю вызвать сам скрипт
<script language="javascript" src="ajax-inc.js" type="text/javascript"></script>


Проблема в том, что в XSLT символ & нужно передавать как &amp;
Хорошо, прописываю как &amp;
Анализатор XSLT не ругается.

Зато начинает ругаться анализатор JavaScript, выводя предупреждение в "духе":
в текстовом комментарии обнаружен недопустимый знак.

Приведу листинг JavaScript-фукнции (писал не я):

function SimpleTransformXML(sXmlSrc, sXslSrc) {
   var sXlsFile = "", sXmlFile = "";
   var oXml, oXsl;
   var sRet = "";
   sXmlFile = ""
   sXlsFile = ""
   if (sXmlSrc == "" || sXmlSrc == "")
      return sRet;

   oXml = new ActiveXObject('MSXML2.FreeThreadedDOMDocument');
   oXml.async = false;
   if (sXmlSrc.indexOf(("<"+"?xml")) < 0) // sXmlSrc - xml file
      sXmlFile = sXmlSrc;

   if (sXmlFile == "") {
      //window.alert("oXml.loadXML " + sXmlSrc);
      oXml.loadXML(sXmlSrc);
   }   
   else {
      //window.alert("oXml.load " + sXmlFile);
      oXml.load(sXmlFile);
   }   
   
   ShowXmlErr(oXml, "SimpleTransformXML.XML");
   oXsl = new ActiveXObject("MSXML2.FreeThreadedDOMDocument");
   oXsl.async = false;

   if (sXslSrc.indexOf(("<"+"?xml")) < 0) // sXslSrc - xsl file
      sXlsFile = sXslSrc;

   if (sXlsFile == "")
      oXsl.loadXML(sXslSrc);
   else {
//      window.alert("oXml.load " + sXlsFile);
      oXsl.load(sXlsFile);
   }
   ShowXmlErr(oXsl, "SimpleTransformXML.XLS");
   sRet = oXml.transformNode(oXsl);
//   window.alert(sRet);
//   window.alert("sRet.length=" + sRet.length);
   ShowXmlErr(oXml, "SimpleTransformXML.Transform");
   oXml = null;
   oXsl = null;
   return sRet;
}

function ShowXmlErr(obj, sMsg) {
   var xmlErr;
   var sErrMsg = "";
   if (obj.parseError.errorCode != 0) {
      xmlErr = obj.parseError;   
      sErrMsg += "You have " + sMsg + " error.\n";
      sErrMsg += "Error #: " + xmlErr.errorCode + ": " + xmlErr.reason + "\n";
      sErrMsg += 'Line #: ' + xmlErr.Line + '\n' ;
      sErrMsg += 'Line Position: ' + xmlErr.linepos + '\n' ;
      sErrMsg += 'Position In File: ' + xmlErr.filepos + '\n' ;
      sErrMsg += 'Source Text: ' + xmlErr.srcText + '\n' ;
      sErrMsg += 'Document URL: ' + xmlErr.url;
      window.alert(sErrMsg);
   }
}

function GetXMLResponse2(sHref) {
   var objHTTP, sQS;
   var sRet = "";
   if (sHref == "") 
      return sRet;
   
   sQS = sHref.substr(0,4);
   sQS = sQS.toUpperCase();
   if (sQS != 'HTTP') {
      sQS = window.location.protocol + '//' + window.location.host + sHref;
      
   }
   else
      sQS = sHref;
   
   objHTTP = new ActiveXObject("Msxml2.ServerXMLHTTP");

   objHTTP.open ("GET", sQS, false) ; // NTLM
   objHTTP.setRequestHeader ("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;)")
   objHTTP.setRequestHeader ("Content-Type", "text/html;Windows-1251");
   objHTTP.send();
   if (objHTTP.status == 200 || objHTTP.status == 304) { // ok OR cashe
      sRet = objHTTP.responseText;
   }   
   objHTTP = null;
   return sRet;
}   

function GetXMLResponse(sHref) {
   var oXml, sQS;
   var sRet = "";
   if (sHref == "") 
      return sRet;

   oXml = new ActiveXObject('MSXML2.FreeThreadedDOMDocument');
   oXml.async = false;
   oXml.load(sHref);
   if (oXml.parseError.errorCode != 0) 
      // ShowXmlErr(oXml, 'load');
      return sRet;
   else
      sRet = oXml.xml;
   oXml = null;
   return sRet;
}


Как мне решить эту проблему?
Спасибо всем, кто откликнется!
Ответить с цитированием
  #2 (permalink)  
Старый 30.03.2009, 16:10
Аспирант
Отправить личное сообщение для IIIEPJIOK Посмотреть профиль Найти все сообщения от IIIEPJIOK
 
Регистрация: 23.12.2008
Сообщений: 75

Создать пустой html файл;
написать в нем функцию загрузки XML-файлов;
загрузить xml файлы,
если на это этапе ошибка будет, то написать о ней на форуме, если нет ошибок, то будет смотреть, что делать дальше

ЗЫ А функции эти можно выкинуть, кроме как в IE, работать нигде не будут
Ответить с цитированием
  #3 (permalink)  
Старый 30.03.2009, 16:57
Аспирант
Отправить личное сообщение для artwalek Посмотреть профиль Найти все сообщения от artwalek
 
Регистрация: 11.12.2008
Сообщений: 44

Спасибо.

В таком случае можете предложить публичное кросс-браузерное решение?
Ответить с цитированием
  #4 (permalink)  
Старый 30.03.2009, 18:53
Аспирант
Отправить личное сообщение для IIIEPJIOK Посмотреть профиль Найти все сообщения от IIIEPJIOK
 
Регистрация: 23.12.2008
Сообщений: 75

я могу помочь его реализовать
Ответить с цитированием
  #5 (permalink)  
Старый 30.03.2009, 21:14
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

Цитата:
я могу помочь его реализовать
я думаю, на данном этапе это будет слишком круто

http://www.w3schools.com/xsl/xsl_client.asp
Ответить с цитированием
  #6 (permalink)  
Старый 30.03.2009, 23:58
Аспирант
Отправить личное сообщение для IIIEPJIOK Посмотреть профиль Найти все сообщения от IIIEPJIOK
 
Регистрация: 23.12.2008
Сообщений: 75

Цитата:
я думаю, на данном этапе это будет слишком круто
Глаза боятся, руки делают
Ответить с цитированием
  #7 (permalink)  
Старый 31.03.2009, 14:03
Аспирант
Отправить личное сообщение для artwalek Посмотреть профиль Найти все сообщения от artwalek
 
Регистрация: 11.12.2008
Сообщений: 44

Сообщение от x-yuri Посмотреть сообщение
я думаю, на данном этапе это будет слишком круто

http://www.w3schools.com/xsl/xsl_client.asp
Спасибо, но этот пример нигде, кроме IE не заработал :wacko:

Вы не проверяли? У вас работает?
Ответить с цитированием
  #8 (permalink)  
Старый 31.03.2009, 18:00
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

только что проверил (кнопка "try it yourself") - работает в ie, opera, ff
Ответить с цитированием
  #9 (permalink)  
Старый 03.04.2009, 09:48
Аспирант
Отправить личное сообщение для artwalek Посмотреть профиль Найти все сообщения от artwalek
 
Регистрация: 11.12.2008
Сообщений: 44

Сообщение от x-yuri Посмотреть сообщение
только что проверил (кнопка "try it yourself") - работает в ie, opera, ff
Странно, руки вроде не кривые.

Но рабочая Mozilla как-то странно работает.
Ответить с цитированием
  #10 (permalink)  
Старый 03.04.2009, 17:11
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

какая версия (у меня 3.0.8) и что значит странно работает? Ты про пример который на сайте w3schools говоришь или про свою страничку?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Использование window.open() для позиционирования окна в середине экрана marat-chessman Events/DOM/Window 13 14.08.2011 20:20
Использование jQuery.timers netlexx jQuery 7 23.12.2008 17:29
Использование dll в javascript. alexKniaz Общие вопросы Javascript 5 28.10.2008 18:56
Использование метода setTimeout News Общие вопросы Javascript 3 18.09.2008 20:37
Функция oncklick и ее использование Fobos Общие вопросы Javascript 3 23.05.2008 14:04