В неком 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 символ & нужно передавать как &
Хорошо, прописываю как &
Анализатор 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;
}
Как мне решить эту проблему?
Спасибо всем, кто откликнется!