至於我可以告訴這個問題是由引起嘗試(在包括的樣式表)來使用
<msxsl:script language="JScript" implements-prefix="exsl">
this['node-set'] = function (x) {
return x;
}
</msxsl:script>
得到MSXML,通過IE和邊緣使用XSLT處理器,支持exsl:node-set
擴展功能。使用msxsl:script
的代碼適用於IE,但在Edge中似乎不支持,可能是因爲他們出於安全原因禁用了msxsl:script
,或者因爲Edge中新的更精簡的架構不支持它(我猜測原因,我從未見過任何關於Edge/MSXML的文檔說msxsl:script
不支持,爲什麼)。對於它的價值,我現在試圖在https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/7598626/上的Microsoft Edge上提交該問題。
有沒有簡單的出路,樣式表複雜,你有他們和其他人撰寫我想你需要問作者他們是否知道邊緣問題,並正在修復或他們是否有通知微軟關於這個問題,即建立XSLT黑客使用msxsl:script
來強制執行exsl:node-set
跨XSLT 1.0處理器的兼容性,現在在Edge中被破壞。
作爲速戰速決,你可以嘗試取消對msxsl:script
塊中導入的樣式表,然後用
<xsl:template name="xml-to-string">
<xsl:param name="node-set" select="."/>
<xsl:choose>
<xsl:when test="function-available('msxsl:node-set')">
<xsl:apply-templates select="msxsl:node-set($node-set)/*" mode="xml-to-string">
<xsl:with-param name="depth" select="1"/>
</xsl:apply-templates>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="exsl:node-set($node-set)/*" mode="xml-to-string">
<xsl:with-param name="depth" select="1"/>
</xsl:apply-templates>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
更換
<xsl:template name="xml-to-string">
<xsl:param name="node-set" select="."/>
<xsl:apply-templates select="exsl:node-set($node-set)/*" mode="xml-to-string">
<xsl:with-param name="depth" select="1"/>
</xsl:apply-templates>
</xsl:template>
我沒有測試是否解決該問題的特定輸入文件,顯然不是它是否爲其他輸入文件分解。
也許你沒有允許在邊緣的活動內容,請參閱http://stackoverflow.com/questions/10529999/why-xslt8690-xslt-processing-failed-when-processing-local-xml-xslt – wero