Показать сообщение отдельно
  #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;
}


Как мне решить эту проблему?
Спасибо всем, кто откликнется!
Ответить с цитированием