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 が [オブジェクト ドキュメント] [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 つのブロックを添付しました。

4

1 に答える 1

0

IE 9より前のバージョンのIEには独自のXMLパーサーがありませんが、任意のバージョンのMSXMLを使用してXMLを解析できます。MSXML(バージョン3以降)もXSLT変換をサポートしています。

IE 9では、IEに独自のXMLパーサーが追加され、スクリプトからDOMParserXMLDOMドキュメントを作成するために使用できます。ただし、IEにはそのようなドキュメントにXSLT変換を適用するための独自のサポートがなく、MSXMLはXSLTへの入力としてIEのDOMドキュメントを処理しません。

したがって、IE 9でXSLTを使用する場合は、MSXML DOMドキュメントをで作成する必要がありますnew ActiveXObject('Microsoft.XMLDOM')(最近はそれぞれ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;
  ...
}
于 2012-10-11T10:53:13.693 に答える