XML解析后的“对象”与“对象文档”,IE 9不接受

时间:2012-10-11 02:56:09

标签: javascript xml xslt dom internet-explorer-9

我在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文件很长...所以我附上了一个块。

1 个答案:

答案 0 :(得分:0)

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

使用IE 9,IE现在拥有自己的XML解析器,您可以使用DOMParser脚本来构建XML DOM文档。但是IE没有自己的支持来对这些文档应用XSLT转换,并且MSXML不能与IE的DOM文档一起作为XSLT的输入。

因此,如果您想在IE 9中使用XSLT,您需要确保使用new ActiveXObject('Microsoft.XMLDOM')构建MSXML DOM文档(目前建议分别为new ActiveXObject('Msxml2.DOMDocument.3.0'))而不是DOMParser 。所以基本上你的功能检查if (window.DOMParser)不是正确的方法,如果你想用浏览器应用XSLT,而不是使用例如。

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;
  ...
}