将 XSLT 应用于下面列出的 XML 文件时,找不到匹配项。此转换是在 Internet Explorer 8 中使用 Msxml2 库在客户端执行的。虽然我的最终应用程序要复杂得多,但下面的简单测试失败了。
XML:
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE document SYSTEM 'xmlschemas/domino_8_5_3.dtd'>
<document xmlns='http://www.lotus.com/dxl' version='8.5' maintenanceversion='3.0'
replicaid='862570A600460D8C' form='Appeal'>
<item name="criteria"></item>
</document>
XSLT:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:dxl="http://www.lotus.com/dxl" >
<xsl:template match="dxl:document">
<xsl:text>It worked!</xsl:text>
</xsl:template>
</xsl:stylesheet>
我已经阅读了无数关于名称空间的“解决方案”并尝试了所有这些......它总是无法匹配。在几个场景中,我能够通过删除 !DOCTYPE 标记来获取整个文档,但是匹配不起作用(只是返回了所有文本并且从未显示“它有效!”
编辑:进行转换的相同代码在我的应用程序的另一部分工作,但在这种情况下不是。这是代码:
var xml2;
var xsl2;
$.get("test2.xml", function(data) { getXSL(data); });
function getXSL(data) {
xml2 = new ActiveXObject("Msxml2.DOMDocument.6.0")
xml2.loadXML(data);
$.get("test2.xsl", function(data) { transformCriteriaXML(data); });
}
function transformCriteriaXML(data) {
xsl2 = new ActiveXObject("Msxml2.DOMDocument.6.0")
xsl2.loadXML(data);
var outFile;
var objFSO = new ActiveXObject("Scripting.FileSystemObject");
outFile = "output.txt";
var objFile = objFSO.CreateTextFile(outFile, true);
objFile.Write(xml2.transformNode(xsl2));
objFile.Close();
}
不同的操作系统和不同的 IE 版本是不可协商的,因为这是一个公司应用程序,唯一可用的 IE 是 8.0 版。(上述代码允许我将文件写入本地 PC 的原因是因为它是 HTML 应用程序 (.hta),因此禁用了安全限制。)
上面的 output.txt 只显示<?xml version="1.0" encoding="utf-8"?>
.