xml - XSLTProcessor.transformToFragment( ) 在 Microsoft edge 上返回 null

标签 xml xslt transformation microsoft-edge

我有以下代码行从两个文档转换 XMLfragment,这段代码在 Firefox 和 chrome 中没有问题,但每当我在 Edge 中使用它时,它返回 null(SchemaStylesheetObj 是一个 XSLTprocessor 对象):

xmlFragment = SchemaStylesheetObj.transformToFragment(xmldoc, ownerDocument);

我的 xmldoc 和 ownerDocument 都有正确的 textContents,下面是我用于转换的 XSLT 文件的一部分:

<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
            xmlns:xlink="http://www.w3.org/1999/xlink"
            xmlns:exsl="http://exslt.org/common"
            xmlns:func="http://exslt.org/functions"
            xmlns:doc="http://nwalsh.com/xsl/documentation/1.0"
            xmlns:dyn="http://exslt.org/dynamic"
            xmlns:saxon="http://icl.com/saxon"
            xmlns:dtbl="http://docbook.sourceforge.net/dtbl"
            xmlns:ptbl="http://nwalsh.com/xslt/ext/xsltproc/python/Table"
            xmlns:stbl="http://nwalsh.com/xslt/ext/com.nwalsh.saxon.Table"
            xmlns:xtbl="com.nwalsh.xalan.Table"
            xmlns:lxslt="http://xml.apache.org/xslt"
            xmlns:str="http://exslt.org/strings"
            xmlns:msxsl="urn:schemas-microsoft-com:xslt"
            xmlns:t="http://thresholds.data"
            xmlns:lip="http://listItemPrefix.data"
            xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
            extension-element-prefixes="str"
            version="1.0">
            ....
            <xsl:output method="xml" indent="yes" omit-xml-declaration="yes" encoding="UTF-8"/>
            <xsl:preserve-space elements="*" />

            <xsl:template name="debug_spec_version">
            <div class="debug_pane xslt_debug">Processed with 2361E v5.00  style sheet</div>
            </xsl:template>

        </xsl:stylesheet>

ownerDocument 正在使用以下行生成:

var ownerDocument = document.implementation.createDocument("", "test", null);

xmldoc 是这样生成的:

var xmldoc = xmlparser.parseFromString(xmlContents, "text/xml");

xmlContents的前几行如下:

<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--Arbortext, Inc., 1988-2013,    v.4002-->\n<!DOCTYPE macwp PUBLIC \"-//USA-DOD//DTD MIL-STD-2361 TM Assembly REV   E 5.0 20131101//EN\"\n \"production.dtd\">\n<?Pub Inc?>\n<macwp chngno=\"0\" wpno=\"A0002\">\n<wp.metadata><portionmark/>\n<proponent>\n<name></name>\n<address><city></city><state></state></address>\n</proponent>\n<tracking>\n<change.history>\n<author>\n<name>vansycke</name>\n<proponent>\n<name></name>\n<address><city></city><state></state></address>\n</proponent>\n</author>

我该如何解决这个问题?

最佳答案

我最近在努力使我的应用程序与 EDGE 兼容时遇到了这个问题,几个小时后我找到了它的解决方案和根本原因。

transformToFragment 失败的根本原因是您的样式表中使用了以下命名空间。

xmlns:exsl="http://exslt.org/common"

请删除此命名空间并使用

xmlns:msxsl="urn:schemas-microsoft-com:xslt"

希望这能解决您的问题。

关于xml - XSLTProcessor.transformToFragment( ) 在 Microsoft edge 上返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42100683/

相关文章:

xml - 初学者 - 使用 XSLT 进行 XML 到 XML 转换

java - XSLT 参数不起作用

xml - 使用 XSLT 删除第一个 <p> 标签

c# - 如何解决数据集错误 - 数据集不支持 'union' 或 'list' 作为 simpleType

java - 检查相同的文本是否出现在 2 个不同的 xpath 下

xml - MATLAB:修改XML文件并保存

xslt - 基于动态字符串的XPATH语句评估

xml - XSD 设计模式

xml - 计算 XML 文档中特定节点的出现频率

javascript - 如何将 Epoch 中的日期转换为 Javascript 中的 "Y-m-d H:i:s"?