2016-05-17 7 views
2

Ich arbeite an einem digitalen Archivprojekt, das eine Vielzahl von XML-Dokumenten enthält. Um sie alle zu transformieren, setzen wir XSLT ein. Die gleiche XSLT-Transformation, die in IE, Chrome, Firefox und Safari funktioniert, funktioniert jedoch nicht in Microsoft Edge. Es spuckt nur den Text aus dem XML-Dokument unformatiert mit der folgenden Fehlermeldung aus:Allgemeiner Fehler beim Versuch, XML in XSLT auf Microsoft Edge zu transformieren

HTML1300: Navigation ist aufgetreten. XML5001: Anwenden der integrierten XSLT-Verarbeitung. XSLT8690: XSLT-Verarbeitung fehlgeschlagen.

Ich habe versucht, ein Testbeispiel für grundlegende XML-und XSL-Dateien, die durch die Herstellung der transformierten XML funktioniert, aber immer noch nicht finden, wo das digitale Archiv XSLT bricht.

Jede Hilfe wird geschätzt. Hier

ist das Testszenario: http://www.gracethom.com/test/test.xml

Hier ist eine Textseite des Archivs, die nicht erfolgreich in Rand nicht verwandeln: http://dcl.slis.indiana.edu/petrarchive/content/c001r.xml#rvf001

+0

vielleicht haben Sie aktiven Inhalt in Edge nicht zugelassen, siehe http://stackoverflow.com/questions/10529999/why-xslt8690-xslt-processing-failed-when-processing-local-xml-xslt – wero

Antwort

1

Soweit ich das Problem verursacht wird, durch die sagen kann, Versuch (in einer inkludierten Sheet)

<msxsl:script language="JScript" implements-prefix="exsl"> 
    this['node-set'] = function (x) { 
    return x; 
    } 
    </msxsl:script> 

zu MSXML zu bekommen, den XSLT-Prozessor von IE und Edge-verwendet zu verwenden, unterstützen die exsl:node-set Erweiterungsfunktion. Dieser Code, der msxsl:script verwendet, funktioniert in IE aber scheint in Edge nicht unterstützt zu werden, wahrscheinlich, weil sie msxsl:script aus Sicherheitsgründen deaktiviert haben oder weil ihre neue, schlankere Architektur in Edge es nicht unterstützt (ich vermute die Gründe, die ich nie gesehen habe jede Dokumentation zu Edge/MSXML sagt, dass msxsl:script nicht unterstützt wird und warum). Für was es wert ist, habe ich jetzt versucht, dieses Problem auf Microsoft Edge um https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/7598626/ zu speichern.

Es gibt keinen einfachen Ausweg, mit Stylesheets so komplex wie Sie sie haben und von anderen erstellt Ich denke, Sie müssen die Autoren fragen, ob sie das Edge-Problem kennen und an einer Reparatur arbeiten oder ob sie informiert haben Microsoft über das Problem, dass es ein etablierter XSLT-Hack ist, msxsl:scriptexsl:node-set Kompatibilität über XSLT 1.0 Prozessoren zu erzwingen, die jetzt in Edge gebrochen ist.

Als schnelle Lösung Sie könnten versuchen, den msxsl:script Block in dem importierten Sheet Kommentar- und ersetzen dann

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

mit

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

habe ich nicht getestet, ob das das Problem für die jeweilige löst Eingabedokument und offensichtlich nicht, ob es Dinge für andere Eingabedokumente bricht.