0

Windows 8 JavaScriptアプリを作成していますが、次のような文字列を変換する必要があります。

<p>
  blah blah blah
</p>
<div>
  <p>
    random dom stuff
  </p>
</div>

XML DOMオブジェクトに変換するので、DOMメソッド(つまりgetElementByID())を使用してオブジェクトをトラバースできます。

私は2つの方法を試しました

 //retrieve text to process
 var content = xml.querySelector("api > parse > text").textContent;

 //1
 var contentXML = new DOMParser().parseFromString(content, "text/xml");

 //2
 var newContentXML = new ActiveXObject("Microsoft.XMLDOM");
 newContentXM.async = false;
 newContentXM.loadXML(content);

両方とも失敗します。#1とOnly one root element is allowed.、#2とAutomation server can't create object. Can't load the ActiveX plug-in that has the class ID '{2933BF90-7B36-11D2-B20E-00C04F983E60}'. Applications can't load ActiveX controls.

私が見たところどこでも、#2はIEでそれを行う方法であり、W8JSアプリはIEと同じJavaScriptエンジンを使用していると思います。

テキストをXMLDOMオブジェクトに変換するにはどうすればよいですか?

4

2 に答える 2

2

DOMParserは問題なく、エラーは正確です。parseFromStringはドキュメントのインスタンスを返しますが、テキストは単一のドキュメントルートを定義していません。これは、段落とdivの2つの連結です。

以下が機能します。

<div>
  <p>
    blah blah blah
  </p>
  <div>
    <p>
      random dom stuff
    </p>
  </div>
</div>

ちなみにオリジナルの弦は、

  • ChromeのDOMParser実装でも、「ドキュメントの最後に余分なコンテンツがあります」というエラーがスローされます
  • Firefoxは、「XML解析エラー:ドキュメント要素の後にジャンク」を生成します。
于 2012-12-01T22:17:29.680 に答える
0

IEは苦痛であり、はるかに複雑な方法で物事を行います。ほとんどのブラウザで動作しますが、IEではActiveXオブジェクトをDOMParser作成する必要があります。または-最初にサポートされている方を作成する必要があります。どちらを使用するかを検出するコードは次のとおりです。MSXML2.DOMDocument.6.0MSXML2.DOMDocument.3.0MSXML2.DOMDocument

var xml, tmp;
try {
    if (isIE)   // add your IE detection here
    {
        var versions = ["MSXML2.DOMDocument.6.0",
                "MSXML2.DOMDocument.3.0",
                "MSXML2.DOMDocument"];

        for (var i = 0; i < 3; i++){
            try {
                xml = new ActiveXObject(versions[i]);

                if (xml)
                    break;
            } catch (ex){
                xml = null;
            }
        }

        if (xml)
        {
            xml.async = "false";
            xml.loadXML(str);
        }
    }
    else {
        tmp = new DOMParser();
        xml = tmp.parseFromString(str, "text/xml");
    }
} catch(e) {
    xml = null;
}
于 2012-12-01T15:07:30.767 に答える