如何使用javascript将xsl样式应用于html中的嵌入式xml
我有一个html文件,里面嵌入了xml标记,我正在尝试应用xslt样式,这些样式是用javascript导入的另一个单独的文件(somefile.xsl)中编写的,我成功地用外部xslt文件导入javascript来应用样式,但它只在internet explorer中工作,其他浏览器无法应用样式。。下面是我的html代码,请看我的代码。我在哪里做错了?除了IE,其他浏览器似乎都无法使用这些技术如何使用javascript将xsl样式应用于html中的嵌入式xml,javascript,html,xml,xslt,Javascript,Html,Xml,Xslt,我有一个html文件,里面嵌入了xml标记,我正在尝试应用xslt样式,这些样式是用javascript导入的另一个单独的文件(somefile.xsl)中编写的,我成功地用外部xslt文件导入javascript来应用样式,但它只在internet explorer中工作,其他浏览器无法应用样式。。下面是我的html代码,请看我的代码。我在哪里做错了?除了IE,其他浏览器似乎都无法使用这些技术 <HTML> <HEAD> <TITLE>
<HTML>
<HEAD>
<TITLE>Sample XML with XSL</TITLE>
<xml id="elx">
<hello-world>
<greeter>An XSLT Programmer</greeter>
<greeting>Hello, World! </greeting>
</hello-world>
</xml>
</HEAD>
<BODY>
<SCRIPT language = "javascript">
if(window.ActiveXObject)
{
//IE
alert("hi");
var xslDoc = new ActiveXObject("Microsoft.XMLDOM");
xslDoc.async = false;
xslDoc.load("helloworld.xsl");
document.write(elx.transformNode(xslDoc));
}
else if (document.implementation && document.implementation.createDocument)
{
//For Other Browsers
xsltProcessor=new XSLTProcessor();
xsltProcessor.importStylesheet("helloworld.xsl");
result = xsltProcessor.transformToDocument(elx);
// here 'elx' is id of embedded xml in header.
document.write(result);
}
</SCRIPT>
</BODY>
</HTML>
使用XSL的示例XML
XSLT程序员
你好,世界!
if(window.ActiveXObject)
{
//即
警报(“hi”);
var xslDoc=newActiveXObject(“Microsoft.XMLDOM”);
xslDoc.async=false;
load(“helloworld.xsl”);
document.write(elx.transformNode(xslDoc));
}
else if(document.implementation&&document.implementation.createDocument)
{
//对于其他浏览器
xsltProcessor=新的xsltProcessor();
importStylesheet(“helloworld.xsl”);
结果=xsltProcessor.transformToDocument(elx);
//这里的“elx”是头中嵌入的xml的id。
记录(结果);
}
这是我的xsl(helloworld.xsl)文件,我正试图用javascript导入该文件,并将样式添加到html文件中嵌入的xml中
<?xml version="1.0" encoding="ISO-8859-1" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" >
<xsl:output method="html" version="1.1" encoding="iso-8859-1" />
<xsl:template match="/hello-world">
<HTML>
<HEAD>
<TITLE>
</TITLE>
</HEAD>
<BODY>
<H1>
<xsl:value-of select="greeting"/>
</H1>
<xsl:apply-templates select="greeter"/>
</BODY>
</HTML>
</xsl:template>
在html文件中,我只获得该xml文件的id,通过使用该xml id,我需要使用javascript应用样式。希望您理解我的问题,并请尽快解决此问题。可以肯定的是,转到XSL教程是: 但在你的事业中,我认为围绕你的“其他浏览器”的if声明是值得怀疑的问题
<yourCode>
else if (document.implementation && document.implementation.createDocument)
</yourCode>
else if(document.implementation&&document.implementation.createDocument)
您能否将警报或控制台日志添加到If语句中以进行检查?还有,为什么还有第二个if语句?如果你有“IE代码”和“非IE”代码,为什么不把它放在一个else中呢
注意:我还没有试过你的代码,现在是感恩节之夜,我有点累了,但是我有一些想法,importStylesheet需要对象(不是文件的url),你可以从domParser获得它
var domParser = new DOMParser();
xsltProcessor.importStylesheet( domParser.parseFromString(some_text_value, "text/xml") );
针对Firefox/Chorme的完整惰性解决方案,如以下代码
<HTML>
<HEAD>
<script id="elx" type="text/xml">
<hello-world>
<greeter>An XSLT Programmer</greeter>
<greeting>Hello, World! </greeting>
</hello-world>
</script>
<script id="stlsh" type="text/xml">
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html" version="1.1" encoding="iso-8859-1" />
<xsl:template match="/hello-world">
<HTML>
<BODY>
<H1>
<xsl:value-of select="greeting"/>
</H1>
<xsl:apply-templates select="greeter"/>
</BODY>
</HTML>
</xsl:template>
</xsl:stylesheet>
</script>
</HEAD>
<BODY>
<SCRIPT language = "javascript">
var domParser = new DOMParser();
var xsltProcessor = new XSLTProcessor();
xsltProcessor.importStylesheet( domParser.parseFromString(stlsh.innerHTML, "text/xml") );
var result = xsltProcessor.transformToDocument( domParser.parseFromString(elx.innerHTML, "text/xml") );
document.write(result.firstElementChild.innerHTML);
</SCRIPT>
</BODY>
</HTML>
XSLT程序员
你好,世界!
var domParser=新的domParser();
var xsltProcessor=new xsltProcessor();
importStylesheet(domParser.parseFromString(stlsh.innerHTML,“text/xml”);
var result=xsltProcessor.transformToDocument(domParser.parseFromString(elx.innerHTML,“text/xml”);
document.write(result.firstElementChild.innerHTML);
如果要使用外部文件,需要将stlsh.innerHTML/elx.innerHTML更改为带有responseText的XMLHttpRequest,并将其放入domParser
或者获取XMLHttpRequest responseXML.documentElement-可能是,domParser不需要Yes in else块“alert()”正在工作,但样式未应用于使用javascript命令->结果=xsltProcessor.transformToDocument(elx)的xml id“elx”;我不知道这行代码出了什么问题。如果有人以其他方式找到了,我需要一个解决方案。问题可能是因为xml数据岛在HTML中只是microsoft支持的功能,其他浏览器可能无法识别。事实上,微软将不再在IE10及以上版本中支持它(请参阅)。我认为解决方案必须是将XML放在一个单独的文件中,而不是嵌入HTML中。