0

在 IE9 中进行 XML 解析后,我遇到了一个问题。当我提醒我解析 XML 的变量时,在除 IE9 之外的所有其他浏览器中,我可以看到文本 [Object],但在 IE9 中它显示的是 [Object Document]。因此,变量值未分配给输入参数。代码:

if (window.DOMParser)
  {
  parser=new DOMParser();
  xmlDoc=parser.parseFromString(txt,"text/xml");
  }
else // Internet Explorer
  {
  xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
  xmlDoc.async=false;
  xmlDoc.loadXML(txt); 
  }


xslProc = xslt.createProcessor();
xslProc.input = xmlDoc;

在 IE9 中,我可以看到 IF 块每次都在执行,xmlDoc 警告为 [Object Document] [仅在 IE9 中],当我在输入参数(最后一行)中分配 xmlDoc 对象时,代码停止,所有其他浏览器,包括 IE7, IE8 运行良好。任何帮助将不胜感激。提前致谢。

编辑: XSLT 格式

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="html" />
    <xsl:param name="selectedSKU"></xsl:param>
    <xsl:param name="pageName">skuset</xsl:param>
    <xsl:param name="selectedSWATCH"></xsl:param>
    <xsl:param name="colFlag">0</xsl:param>
    <xsl:param name="xslStoreId">10001</xsl:param>
    <xsl:param name="xslLangId">-1</xsl:param>
    <xsl:param name="xslCatalogId">10051</xsl:param>
    <xsl:param name="exitURL"></xsl:param>
    <xsl:param name="iskiosk">0</xsl:param>

    <xsl:param name="AddToCart"></xsl:param>
    <xsl:param name="Qty"></xsl:param>

    <xsl:template match="/">
        <xsl:apply-templates select="//product[@id=$selectedSKU]" />
    </xsl:template>
    <xsl:variable name="label_stars">
        <xsl:value-of select="productcatalog/labels/label[@key='common.stars']" />
    </xsl:variable>
    <xsl:variable name="label_reviews">
        <xsl:value-of select="productcatalog/labels/label[@key='common.reviews']" />
    </xsl:variable>
</xsl:stylesheet> 

XSLT 文件很长……所以我附上了一个块。

4

1 回答 1

0

IE 9 之前的 IE 版本没有自己的 XML 解析器,而是可以使用任何版本的 MSXML 来解析 XML。MSXML(从版本 3 开始)也支持 XSLT 转换。

在 IE 9 中,IE 现在拥有自己的 XML 解析器,您可以使用 from script withDOMParser来构造 XML DOM 文档。但是,IE 不支持在此类文档上应用 XSLT 转换,并且 MSXML 不能将 IE 的 DOM 文档用作 XSLT 的输入。

因此,如果您想在 IE 9 中使用 XSLT,您需要确保使用new ActiveXObject('Microsoft.XMLDOM')new ActiveXObject('Msxml2.DOMDocument.3.0')目前分别推荐)而不是使用DOMParser. 因此,如果您想在浏览器中应用 XSLT,基本上您的功能检查if (window.DOMParser)不是正确的方法,而是使用例如

var input;

if (window.XSLTProcessor && window.DOMParser) {
  input = new DOMParser().parseFromString(txt, 'application/xml');
}
else if (window.ActiveXObject) {
  input = new ActiveXObject('Msxml2.DOMDocument.3.0');
}

if (input) {
  xslProc = xslt.createProcessor();
  xslProc.input = input;
  ...
}
于 2012-10-11T10:53:13.693 回答