Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/432.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.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 在webkit浏览器的xsl文件中使用多个xml文件(客户端转换)_Javascript_Xml_Xslt_Webkit_Client Side - Fatal编程技术网

Javascript 在webkit浏览器的xsl文件中使用多个xml文件(客户端转换)

Javascript 在webkit浏览器的xsl文件中使用多个xml文件(客户端转换),javascript,xml,xslt,webkit,client-side,Javascript,Xml,Xslt,Webkit,Client Side,我目前正在尝试将多个xml文件放入xsl文件中,然后将它们处理成有用的html。这适用于非webkit浏览器,但不适用于webkit浏览器 我正在使用JavaScript来执行转换,它可以在所有浏览器中正常工作,如果我想在其中包含多个xml文件的话 我尝试了各种方法,试图将额外的xml文件放入xsl,这些文件都在同一台服务器上,但在不同的文件夹中 1我尝试过直接将xml文件作为变量添加。例如: <xsl:variable name="structure" select="document(

我目前正在尝试将多个xml文件放入xsl文件中,然后将它们处理成有用的html。这适用于非webkit浏览器,但不适用于webkit浏览器

我正在使用JavaScript来执行转换,它可以在所有浏览器中正常工作,如果我想在其中包含多个xml文件的话

我尝试了各种方法,试图将额外的xml文件放入xsl,这些文件都在同一台服务器上,但在不同的文件夹中

1我尝试过直接将xml文件作为变量添加。例如:

<xsl:variable name="structure" select="document('../structure.xml')"/> 
loadXMLDoc是一段加载xml和xsl文件的简单代码

function loadXMLDoc(fname) {
var isIE = (navigator.appName=="Microsoft Internet Explorer");
if (window.XMLHttpRequest) {
    xhttp = new XMLHttpRequest();
}
else {
  xhttp = new ActiveXObject('Microsoft.XMLHTTP');
}
xhttp.open('GET', fname, false);
if (xhttp.overrideMimeType){
  xhttp.overrideMimeType('text/xml');   
}
xhttp.send(null);
if (isIE) {
  xmlDoc = new ActiveXObject('Microsoft.XMLDOM');
  xmlDoc.async = false;
  xmlDoc.load(fname);
}
else {
  xmlDoc = xhttp.responseXML;
  if (!xmlDoc) {
    xmlDoc = (new DOMParser()).parseFromString(xhttp.responseText, 'text/xml');
  }
}
return xmlDoc;
}
这不起作用,因为webkit不允许将节点设置为参数。再说一次,任何形式的工作都会很精彩

3我尝试了上述方法,但在作为参数添加之前将xml转换为字符串。这允许我获取要传递的参数,但无法将字符串转换回xml进行处理

如果有人对此有任何想法,那也太好了

我想到的另一个选择是使用JavaScript将xml文件合并成一个巨大的文件并进行处理,但我不知道如何做到这一点

此外,我无法进行服务器端处理,因为我无法控制服务器,所以只剩下客户端

正如我之前所说,我可以解决非webkit浏览器的问题。我试图解决这个问题已经有一段时间了,但找不到任何解决办法。我看不出我是唯一一个有这个问题的人,我真的希望有人也有类似的问题,并找到了解决办法或解决办法

提前谢谢

马特

更新:

我还考虑过在JavaScript中添加xml文件

xml=loadXMLDoc("structure.xml);
xsl=loadXMLDoc("xsl/head.xsl");
structurexml =loadXMLDoc("/extranet/structure.xml");
newxml = xml;
newxml.appendChild(sessionxml);
但是得到一个未捕获错误:HIERARCHY\u REQUEST\u ERR:DOM异常3,我认为这是由于新xml中没有根节点这一事实造成的?有人知道我怎样才能成功地添加它们吗?这两个文件是

<?xml version="1.0" encoding="utf-8"?>
<structure>
  <product>
    <id>1</id>
    <unit>
        <id>1</id>
        <name>Blah</name>
        <code>Blah</code>
    </unit>
  </product>
</structure>

有没有一种简单的方法可以在JavaScript或JQuery中实现这一点?

是一种编译成JavaScript的XSLT 2.0处理器,将在webkit和所有主要浏览器中运行,自然支持文档功能。除了原子值之外,它还支持作为参数传递的文档、节点、数组甚至JavaScript对象

您可以使用与您自己的代码非常类似的代码运行转换,但使用:

 xsltProcessor = Saxon.createXSLT20Processor();
但是,也可以使用以下JavaScript

Saxon.run({
   stylesheet: "xsl/head.xsl",
   source:     "structure.xml",
   parameters: {
                    structure: Saxon.requestXML("/extranet/structure.xml");
               }

});
“structure”参数仅用于说明目的,在您的情况下,您只需要在XSLT中正常使用document函数

我还应该提到,使用Saxon CE,可以使用标准XSLT 2.0 xsl:result-document指令对HTML文档进行更新。因此,如果您想通过添加paragrah来更新id为“head”的DIV元素,您可以使用:

<xsl:result-document href="#head" method="append-content">
   <p>Book Title: <xsl:value-of select="$title"/></p>
</xsl:result-document>
是编译为JavaScript的XSLT2.0处理器,将在webkit和所有主要浏览器中运行,自然支持文档功能。除了原子值之外,它还支持作为参数传递的文档、节点、数组甚至JavaScript对象

您可以使用与您自己的代码非常类似的代码运行转换,但使用:

 xsltProcessor = Saxon.createXSLT20Processor();
但是,也可以使用以下JavaScript

Saxon.run({
   stylesheet: "xsl/head.xsl",
   source:     "structure.xml",
   parameters: {
                    structure: Saxon.requestXML("/extranet/structure.xml");
               }

});
“structure”参数仅用于说明目的,在您的情况下,您只需要在XSLT中正常使用document函数

我还应该提到,使用Saxon CE,可以使用标准XSLT 2.0 xsl:result-document指令对HTML文档进行更新。因此,如果您想通过添加paragrah来更新id为“head”的DIV元素,您可以使用:

<xsl:result-document href="#head" method="append-content">
   <p>Book Title: <xsl:value-of select="$title"/></p>
</xsl:result-document>

你好,pgfearo,感谢您抽出时间阅读我的问题并为我提供解决方案。非常感谢。只是想知道您是否知道有一种解决方案不使用需要许可的产品?我遇到的问题是,一个内部网站不能给公司带来任何收入,因此他们不太可能愿意为许可证付费。如果不是,我认为我唯一的解决方案是显示一条消息,要求用户下载可用的浏览器,即非webkit浏览器。再次感谢你的帮助@MattH我昨天才遇到这个问题,我没有尝试过:我认为CORS规范是Webkit支持的,因此如果您能够为所需的HTTP头正确设置承载XML的web服务器,您可能会获得一些成功。感谢您的帮助。如果公司愿意为您的解决方案付费,您的解决方案将有效,因此我感谢您花时间提供答案。已决定显示一条消息,说明不支持webkit浏览器,并添加了指向其他浏览器的链接以供下载。不太好,我知道,但是我必须和其他人一起等待bug被修复。嗨,pgfearo,谢谢
感谢您花时间阅读我的问题并为我提供解决方案。非常感谢。只是想知道您是否知道有一种解决方案不使用需要许可的产品?我遇到的问题是,一个内部网站不能给公司带来任何收入,因此他们不太可能愿意为许可证付费。如果不是,我认为我唯一的解决方案是显示一条消息,要求用户下载可用的浏览器,即非webkit浏览器。再次感谢你的帮助@MattH我昨天才遇到这个问题,我没有尝试过:我认为CORS规范是Webkit支持的,因此如果您能够为所需的HTTP头正确设置承载XML的web服务器,您可能会获得一些成功。感谢您的帮助。如果公司愿意为您的解决方案付费,您的解决方案将有效,因此我感谢您花时间提供答案。已决定显示一条消息,说明不支持webkit浏览器,并添加了指向其他浏览器的链接以供下载。不太好,我知道,但将不得不等待它与其他人的错误得到修复。