1。引入文档声明
xhtml文件开头要求有文档声明,例aspx自动产生的是
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
解决方法:
在xslt文件中声明
<xsl:output method="html"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
doctype-public="-//W3C//DTD XHTML 1.1//EN"
indent="yes"/>
2.引入脚本
在xslt文件中可以一般的使用
<script type="text/javascript">
//your script
</script>
但脚本中如果有<>这样的特殊字符,则会在ie引发转义,ff不会
解决方案:引入disable-output-escaping,因为ie支持这个属性,但ff不支持
<script type="text/javascript">
<xsl:text disable-output-escaping="yes">
<![CDATA[
//your script
]]>
</xsl:text>
3.如何使用 &
解决方法:在xslt文档头部引入实体定义
<!DOCTYPE xsl:stylesheet [
<!ENTITY nbsp " ">
<!ENTITY lt "&#60;">
<!ENTITY gt ">">
<!ENTITY amp "&#38;">
<!ENTITY apos "'">
<!ENTITY quot """>
]>
4.输出CDATA节点的内容,IE可以使用disable-output-escaping="yes",但firefox会不支持,可以通过判断processor是Transformiix,然后再调用脚本即可,此方法使用了innerHTML,所以其中的脚本不会被运行,如果想运行其间的脚本,可参见第五点
解决方法: test="system-property('xsl:vendor')='Transformiix'"(mozilla内核的浏览器都是使用Transformiix)例:
<
div
id
="pagecontent{position()}"
style
="display:inline"
>
<
xsl:value-of
select
="."
disable-output-escaping
="yes"
/>
<
xsl:if
test
="system-property('xsl:vendor')='Transformiix'"
>
<
script
type
="text/javascript"
>
Ext.onReady(function(){
var parent=document.getElementById('pagecontent
<
xsl:value-of
select
="position()"
/>
');
parent.innerHTML=parent.childNodes[0].data;
});
</
script
>
</
xsl:if
>
</
div
>
5.document在firefox和ie中对当前目录的定义不一样,前者依赖于xslt,后者依赖于xml,所以应禁用document,改用javascript脚本调用xml+xslt
解决方法:使用javascript
var
ua
=
navigator.userAgent.toLowerCase();
var
isOpera
=
ua.indexOf(
"
opera
"
)
>-
1
;
var
isIE
=!
isOpera
&&
ua.indexOf(
"
msie
"
)
>-
1
;
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
var
xmlTrans
=
function
(config)
{
var retval = xslStylesheet = xmlDocument = null;
var loadDocument = function (fileStr) {
if (!fileStr) throw new Error("调用XMLHTTP错误,没有指定文件名。");
var req = isIE?new ActiveXObject("MSXML2.XMLHTTP"):new XMLHttpRequest();
req.open("GET", fileStr, false);
req.send(null);
if (req.readyState==4 && req.status==200) {
return req.responseXML;
}
else {
throw new Error("调用XMLHTTP错误,远程文件"+fileStr+"失败.");
}
};
var ready2Transform = function () {
if(config.xml){
xmlDocument = loadDocument(config.xml);
}
else{
if(isIE){
xmlDocument = new ActiveXObject("Microsoft.XMLDOM")
xmlDocument.async="false"
xmlDocument.loadXML(config.xmldoc)
}
else{
xmlDocument = (new DOMParser()).parseFromString(config.xmldoc, "text/xml");
}
}
if(config.xslt){
xslStylesheet = loadDocument(config.xslt);
}
else{
if(isIE){
xslStylesheet = new ActiveXObject("Microsoft.XMLDOM")
xslStylesheet.async="false"
xslStylesheet.loadXML(config.xsltdoc)
}
else{
xslStylesheet = (new DOMParser()).parseFromString(config.xsltdoc, "text/xml");
}
}
};
var parseFromMoz = function () {
var xsltProcessor = new XSLTProcessor();
xsltProcessor.importStylesheet(xslStylesheet);
var retval = xsltProcessor.transformToDocument(xmlDocument);
var sretval=(new XMLSerializer()).serializeToString(retval);
if(sretval.indexOf('<transformiix:result')>-1){
sretval=sretval.substring(sretval.indexOf('>')+1,sretval.lastIndexOf('<'));
}
return sretval
};
var parseFromIE = function () {
var strval=xmlDocument.transformNode(xslStylesheet.documentElement);
if(strval.indexOf('<?xml')>-1){
var indexof=strval.indexOf('>');
strval=strval.substring(indexof+1,strval.length);
}
return strval;
};
ready2Transform();
if (isIE) {
retval = parseFromIE();
}
else{
retval = parseFromMoz();
}
if(config.el){
var el=document.getElementById(config.el);
if(config.add){
el.innerHTML+=retval;
}
else{
el.innerHTML=retval;
}
var regExp=/<script[^>]*>([sS]*?)</script>/gi;
if(regExp.test(el.innerHTML)){
eval(RegExp.$1);
}
}
return retval;
}
其中config定义为
config={
xml:value//指定xml文件源
xmldoc:value//以字符串方式直接传入的xml格式字符串
xslt:value//指定xslt文件源
xsltdoc:value//以字符串方式直接传入的xml格式字符串
el:value//指示要改变的dom节点id,
add:value//是否以添加的方式加入节点
}
例:xmlTrans({xml:'/data/anheiswapimage.xml',xslt:'/xslt/content/anheiswapimage.xslt',el:'navAH'});
xhtml文件开头要求有文档声明,例aspx自动产生的是
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
解决方法:
在xslt文件中声明
<xsl:output method="html"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
doctype-public="-//W3C//DTD XHTML 1.1//EN"
indent="yes"/>
2.引入脚本
在xslt文件中可以一般的使用
<script type="text/javascript">
//your script
</script>
但脚本中如果有<>这样的特殊字符,则会在ie引发转义,ff不会
解决方案:引入disable-output-escaping,因为ie支持这个属性,但ff不支持
<script type="text/javascript">
<xsl:text disable-output-escaping="yes">
<![CDATA[
//your script
]]>
</xsl:text>
3.如何使用 &
解决方法:在xslt文档头部引入实体定义
<!DOCTYPE xsl:stylesheet [
<!ENTITY nbsp " ">
<!ENTITY lt "&#60;">
<!ENTITY gt ">">
<!ENTITY amp "&#38;">
<!ENTITY apos "'">
<!ENTITY quot """>
]>
4.输出CDATA节点的内容,IE可以使用disable-output-escaping="yes",但firefox会不支持,可以通过判断processor是Transformiix,然后再调用脚本即可,此方法使用了innerHTML,所以其中的脚本不会被运行,如果想运行其间的脚本,可参见第五点
解决方法: test="system-property('xsl:vendor')='Transformiix'"(mozilla内核的浏览器都是使用Transformiix)例:
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
5.document在firefox和ie中对当前目录的定义不一样,前者依赖于xslt,后者依赖于xml,所以应禁用document,改用javascript脚本调用xml+xslt
解决方法:使用javascript
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/717446ca04a6125dc5b6b54e0fa14ab4.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/717446ca04a6125dc5b6b54e0fa14ab4.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/717446ca04a6125dc5b6b54e0fa14ab4.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/717446ca04a6125dc5b6b54e0fa14ab4.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/717446ca04a6125dc5b6b54e0fa14ab4.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/717446ca04a6125dc5b6b54e0fa14ab4.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/717446ca04a6125dc5b6b54e0fa14ab4.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/717446ca04a6125dc5b6b54e0fa14ab4.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/717446ca04a6125dc5b6b54e0fa14ab4.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/717446ca04a6125dc5b6b54e0fa14ab4.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/717446ca04a6125dc5b6b54e0fa14ab4.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/717446ca04a6125dc5b6b54e0fa14ab4.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/717446ca04a6125dc5b6b54e0fa14ab4.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/717446ca04a6125dc5b6b54e0fa14ab4.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/717446ca04a6125dc5b6b54e0fa14ab4.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/717446ca04a6125dc5b6b54e0fa14ab4.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/717446ca04a6125dc5b6b54e0fa14ab4.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/717446ca04a6125dc5b6b54e0fa14ab4.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/717446ca04a6125dc5b6b54e0fa14ab4.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/717446ca04a6125dc5b6b54e0fa14ab4.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/717446ca04a6125dc5b6b54e0fa14ab4.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/717446ca04a6125dc5b6b54e0fa14ab4.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/0196c3df5ea9e936f21e9932cca91014.gif)
其中config定义为
config={
xml:value//指定xml文件源
xmldoc:value//以字符串方式直接传入的xml格式字符串
xslt:value//指定xslt文件源
xsltdoc:value//以字符串方式直接传入的xml格式字符串
el:value//指示要改变的dom节点id,
add:value//是否以添加的方式加入节点
}
例:xmlTrans({xml:'/data/anheiswapimage.xml',xslt:'/xslt/content/anheiswapimage.xslt',el:'navAH'});