0

XMLHttpRequest からの xml を解析しようとしています (Firefox 拡張機能用)。次のコードでは、 req は XMLHttpRequest オブジェクトです。req.overrideMimeType("text/xml"); req を宣言した後に行いました。

var shortURL;  
var xmlDoc = document.implementation.createDocument("","",null);  
xmlDoc.async = false;  
xmlDoc = req.responseXml;  
if (xmlDoc.readyState == 4){  
    shortURL = xmlDoc.documentElement.childNodes[8].text;  
}

使用すると、 If I usereq.responseXmlの後の行で「xmlDoc が宣言されていません」というエラーが表示され、false になります。xmlDoc = req.responseXml;req.responseTextxmlDoc.readyState == 4

私は JavaScript をあまり使用しないので、ここで何か間違ったことをしている場合は教えてください。

4

3 に答える 3

1

responseText私は一般的に、ブラウザーに組み込まれている XML 解析ライブラリーを使用して XML を解析することを好みます。その後、JavaScript で簡単にアクセスできるように、通常、結果の XML ドキュメント ツリーまたはサブツリーを JSON に変換します。

私はここにこれのための小さなユーティリティライブラリを書きました:

http://earth-api-samples.googlecode.com/svn/trunk/demos/myearth/lib/xmlutil.js

使い方はとても簡単です:

var json = xmlNodeToJson(parseXml(req.responseText);
于 2009-12-29T04:14:24.073 に答える
0

DOM を使用する必要がありますか? そうでない場合は、E4Xを使用します。それは次のように簡単です

shortURL = new XML(req.responseText).child(8).text();

応答に XML 宣言 ( <?xml version="...">) が含まれている場合は、代わりにこれを使用します。

shortURL = new XML(req.responseText.replace(/^<\?xml\s+version\s*=\s*(["'])[^\1]+\1[^?]*\?>/, "")).child(8).text();
于 2009-12-29T05:15:12.907 に答える
0

ハイ・チャヌス

xml パーサーの基本を理解するのに役立つかもしれません。

http://www.hiteshagraval.com/javascript/javascript-parsing-xml-in-javascript

AJAX 応答 XML エラー

または変更してみてください

shortURL = xmlDoc.documentElement.childNodes[8].Text;

shortURL = xmlDoc.documentElement.childNodes[8].firstChild.nodeValue;

または、この機能を使用して、自分用に変更してください...

function parseXML()
    {
        if (xmlDoc.readyState == 4 && xmlDoc.status == 200)
        {
                xmlDoc = xmlDoc.responseXML;
                regions = xmlDoc.getElementsByTagName("region");
                for (var i = 0; i < regions.length; i++)
                {
                    if (regions[i].getAttribute("id") == regID)
                    {
                        var browserName = navigator.userAgent;
                        var isIE = browserName.match(/MSIE/);
                        if (isIE)
                        {
                            var hotelprice = regions[i].childNodes[0].firstChild.nodeValue;
                            var pkgprice = regions[i].childNodes[1].firstChild.nodeValue;

                        }
                        else
                        {
                            var hotelprice = regions[i].childNodes[1].textContent;
                            var pkgprice = regions[i].childNodes[3].textContent;
                        }
                        document.getElementById("hotel").innerHTML = "$"+hotelprice;
                        document.getElementById("package").innerHTML = "$"+pkgprice;   
                    }
                }
        }
    }
于 2009-12-29T03:49:27.370 に答える