Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用变量在Chrome中执行XSLT转换_Javascript_Xml_Xslt - Fatal编程技术网

Javascript 如何使用变量在Chrome中执行XSLT转换

Javascript 如何使用变量在Chrome中执行XSLT转换,javascript,xml,xslt,Javascript,Xml,Xslt,我正在尝试进行XSL转换 但是,每当引用带有文档片段的变量时,转换似乎都会失败 我创建了一个示例来演示这个问题。示例中的XML是允许XSLT运行的虚拟文档 我做错了什么 Javascript: var xml = [ '<p xmlns="http://www.w3.org/1999/xhtml">', '<\/p>' ].join('\n'); var xsl = [ '<xsl:stylesheet xmlns:xsl="htt

我正在尝试进行XSL转换

但是,每当引用带有文档片段的变量时,转换似乎都会失败

我创建了一个示例来演示这个问题。示例中的XML是允许XSLT运行的虚拟文档

我做错了什么

Javascript:

var xml = [
    '<p xmlns="http://www.w3.org/1999/xhtml">',
    '<\/p>'
    ].join('\n');

var xsl = [
    '<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">',
    '<xsl:variable name="xmlVar">',
    '<aaaa value="It works"\/>',
    '<\/xsl:variable>',
    '<xsl:template match="\/">',
    '<ROOT>',
    //works ok after commenting out
    '<xsl:value-of select="$xmlVar\/aaaa\/@value"\/>',
    '<\/ROOT>',
    '<\/xsl:template>',
    '<\/xsl:stylesheet>'
    ].join('\n');



var domParser = new DOMParser();

var xmlDoc = domParser.parseFromString(xml, 'application/xml');

var xslDoc = domParser.parseFromString(xsl, 'application/xml');

var xsltProc = new XSLTProcessor();
xsltProc.importStylesheet(xslDoc);
try{
var result = xsltProc.transformToFragment(xmlDoc, document);
} catch(exc) {
document.getElementById('error').innerHTML = exc;
}

function encodeStr(rawStr) { return rawStr.replace(/[\u00A0-\u9999<>\&]/gim,   
    function(i){
    return '&#'+i.charCodeAt(0)+';'
  });
}

document.getElementById('xslText').innerHTML = encodeStr(xsl);
document.getElementById('result').innerHTML = encodeStr((new XMLSerializer).serializeToString(result));
var-xml=[
“

', '' ].join('\n'); var xsl=[ '', '', '', '', '', '', //评论出来后效果还可以 '', '', '', '' ].join('\n'); var domParser=新的domParser(); var xmlDoc=domParser.parseFromString(xml,'application/xml'); var xslDoc=domParser.parseFromString(xsl,'application/xml'); var xsltProc=new XSLTProcessor(); xsltProc.importStylesheet(xslDoc); 试一试{ var result=xsltProc.transformToFragment(xmlDoc,document); }捕获(exc){ document.getElementById('error')。innerHTML=exc; } 函数encodeStr(rawStr){返回rawStr.replace(/[\u00A0-\u9999\&]/gim, 职能(一){ 返回“&#”+i.charCodeAt(0)+” }); } document.getElementById('xslText').innerHTML=encodeStr(xsl); document.getElementById('result').innerHTML=encodeStr((新的XMLSerializer.serializeToString(result));

HTML:


在XSLT 1.0中,您需要使用扩展函数,如
exsl:node set
(),将result tree fragment()类型的变量值转换为节点集,以便能够在节点上使用XPath,例如

var-xml=[
“

', '' ].join('\n'); var xsl=[ '', '', '', '', '', '', '', '', '', '' ].join('\n'); var domParser=新的domParser(); var xmlDoc=domParser.parseFromString(xml,'application/xml'); var xslDoc=domParser.parseFromString(xsl,'application/xml'); var xsltProc=new XSLTProcessor(); xsltProc.importStylesheet(xslDoc); 试一试{ var result=xsltProc.transformToFragment(xmlDoc,document); document.getElementById('result').appendChild(result); }捕获(exc){ document.getElementById('error')。innerHTML=exc; }


在XSLT 1.0中,您需要使用扩展函数,如
exsl:node set
(),将result tree fragment()类型的变量值转换为节点集,以便能够在节点上使用XPath,例如

var-xml=[
“

', '' ].join('\n'); var xsl=[ '', '', '', '', '', '', '', '', '', '' ].join('\n'); var domParser=新的domParser(); var xmlDoc=domParser.parseFromString(xml,'application/xml'); var xslDoc=domParser.parseFromString(xsl,'application/xml'); var xsltProc=new XSLTProcessor(); xsltProc.importStylesheet(xslDoc); 试一试{ var result=xsltProc.transformToFragment(xmlDoc,document); document.getElementById('result').appendChild(result); }捕获(exc){ document.getElementById('error')。innerHTML=exc; }



btw,firefox正在抛出“无数据”异常。铬是无声的。如果这有帮助的话,顺便说一句,firefox抛出了“无数据”异常。铬是无声的。如果这有帮助的话,那就太好了,非常感谢。我正在考虑如何解决糟糕的跨浏览器支持问题,现在就开始测试。Martin,我将尝试操纵XSL以实现我的案例的跨浏览器支持。如果它不起作用,我将只创建两组模板,一个用于IE,另一个用于其他浏览器…像往常一样。虽然在这种情况下,它看起来不像IE的故障。非常感谢你的帮助!对跨浏览器支持的更多赞誉!看起来不错,非常感谢。我正在考虑如何解决糟糕的跨浏览器支持问题,现在就开始测试。Martin,我将尝试操纵XSL以实现我的案例的跨浏览器支持。如果它不起作用,我将只创建两组模板,一个用于IE,另一个用于其他浏览器…像往常一样。虽然在这种情况下,它看起来不像IE的故障。非常感谢你的帮助!对跨浏览器支持的更多赞誉!
<pre id='xslText'>

</pre>

<pre id='result'>

</pre>

<pre id='error'>

</pre>