首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MSXML4与MSXML6 XSLT解析命名空间错误

MSXML4与MSXML6 XSLT解析命名空间错误
EN

Stack Overflow用户
提问于 2013-05-29 15:27:31
回答 2查看 2.2K关注 0票数 2

我在网上看到了很多关于MSXML4 to 6或XSLT1.0和2.0等的帖子,但是他们无法回答我的问题。

我有一个XSLT转换代码,它通过Javascript与MSXML4 API (XSLTransform和FreeThreadedDomDocument)在IE7上工作。

通过Javascript,相同的代码不适用于MSXML6 API (XSLTransform和DomDocument)在IE9上。它会抛出这个错误

"Namespace‘urn:mytable:mytable:transaction’不包含任何函数“

我已经确保我的ActiveX在MSXML4和6上都是在IE9上启用的。下面是主要转换XSLT的代码,引用XSLT & JS代码.

核心XSLT: functions.xsl

代码语言:javascript
复制
<xsl:stylesheet version="1.0" 
               xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
               xmlns:msxsl="urn:schemas-microsoft-com:xslt" 
               xmlns:myfuncs="urn:mynamespace:mytable:transactions" >

<msxsl:script language="javascript" implements-prefix="myfuncs">

<![CDATA[
// convert system GMT time into local time
// usage: <xsl:value-of select="myfuncs:localDateTime(datetime)"/>

var openBalance = 0;

function setOpenBalance(openBal)
{
    openBalance = openBal;
}

function getOpenBalance()
{
    openBalance = openBal;
    return openBalance ;
}
]]>
</msxsl:script>

</xsl:stylesheet>

主XSLT: MyTransformer.xsl ..。指的是functions.xsl

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet 
        version="1.0" 
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
        xmlns:msxsl="urn:schemas-microsoft-com:xslt" 
        xmlns:myfuncs="urn:mynamespace:mytable:transactions">

<xsl:output method="xml"/>    
<xsl:include href="functions.xsl" />  
<!--<xsl:variable name="trade_cur_bal" select="myfuncs:getOpenBalance(100)"/>-->
<xsl:template match="/">
    <Response>
            <!-- Some working code here -->
     </Response>
</xsl:template>

</xsl:stylesheet>

JS代码

代码语言:javascript
复制
var domXsl  = new ActiveXObject("Msxml2.FreeThreadedDOMDocument.4.0");

/*
 // In case of IE9 .... 
 var domXsl  = new ActiveXObject("Msxml2.FreeThreadedDOMDocument.6.0");
*/

var domHTML = new ActiveXObject("Msxml2.XSLTemplate.4.0");
/*
 // In case of IE9 .... 
var domHTML = new ActiveXObject("Msxml2.XSLTemplate.6.0");
*/

domXsl.async=false;
domXsl.load("MyTransformer.xsl");
domHTML.stylesheet = domXsl;

var domData = new ActiveXObject("Msxml2.FreeThreadedDOMDocument.4.0");
var input = "<MyInputData></MyInputData>"
domData.loadXML(input);

var result = tranform(domHTML, domData); //Works for MSXML 4.0 and fails for MSXML 6.0

function transform(template_, input_) { 
    var output = "";
    if (input_ != null  && input_.xml != "") {
        var proc = template_.createProcessor();
        proc.input = input_;
        proc.transform();
        output = proc.output;
        delete proc;
    }   
    return output;
}

有人能指点我哪里出问题了吗?MSXML6还是IE9?

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-03 07:03:45

我通过从activeX类ID中删除版本(4和6)来修复这个问题。

例如新的ActiveXObject("Msxml2.FreeThreadedDomDocument")等。

票数 1
EN

Stack Overflow用户

发布于 2013-05-30 12:09:53

对于MSXML 6,出于安全原因,默认情况下将禁用XSLT内部的脚本,因此需要通过调用

代码语言:javascript
复制
var domXsl  = new ActiveXObject("Msxml2.FreeThreadedDOMDocument.6.0");
domXsl.setProperty("AllowXsltScript", true);

此外,为了允许使用xsl:importxsl:include,您还需要设置

代码语言:javascript
复制
domXsl.setProperty("ResolveExternals", true);
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16818022

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档