2016-05-17 264 views
2

我正在處理包含大量XML文檔的數字存檔項目。爲了轉換它們,我們使用XSLT。但是,適用於IE,Chrome,Firefox和Safari的XSLT轉換在Microsoft Edge中無效。它僅從XML文檔中分出文本,未格式化爲以下錯誤消息:嘗試將XML轉換爲Microsoft Edge上的XSLT時出現一般錯誤

HTML1300:導航發生。 XML5001:應用集成的XSLT處理。 XSLT8690:XSLT處理失敗。

我嘗試了一個基本的XML和XSL文件的測試示例,它通過生成轉換後的XML來工作,但仍無法找到數字存檔XSLT發生故障的位置。

任何幫助表示讚賞。

下面是測試場景: http://www.gracethom.com/test/test.xml

這裏是歸檔的一個文本頁面不會在邊緣成功轉換: http://dcl.slis.indiana.edu/petrarchive/content/c001r.xml#rvf001

+0

也許你沒有允許在邊緣的活動內容,請參閱http://stackoverflow.com/questions/10529999/why-xslt8690-xslt-processing-failed-when-processing-local-xml-xslt – wero

回答

1

至於我可以告訴這個問題是由引起嘗試(在包括的樣式表)來使用

<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> 

我沒有測試是否解決該問題的特定輸入文件,顯然不是它是否爲其他輸入文件分解。