4

リモートWebサイトhttp://services.faa.gov/airport/status/IAD?format=xmlからxmlデータを解析したいのですが...xmlデータを解析できず、エラーが発生するだけです。 。しかし、同じリモートWebサイトhttp://services.faa.gov/airport/status/IAD?format=jsonからJSONデータを解析することができました。xmlデータの解析に使用したコードは次のとおりです。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Aviation</title>
<script type="text/javascript" src="Scripts/jquery-1.7.2.min.js"></script>
<script type="text/javascript">
    var result;
    function xmlparser() {
        $.ajax({
            type: "GET",
            url: "http://services.faa.gov/airport/status/IAD?format=xml",
            dataType: "xml",
            success: function (xml) { 
                result = xml.city;
                document.myform.result1.value = result;
            },
            error: function (xml) {
                alert(xml.status + ' ' + xml.statusText);
            }
        });             
    }        
</script>    
</head>
<body>
<p id="details"></p>
<form name="myform">
    <input type="button" name="clickme" value="Click here to show the city name" onclick=xmlparser() />
    <input type="text" name="result1" readonly="true"/>        
</form>
</body>
</html>

エラーメッセージを出力したので、アラートボックスに「oError」としてエラーが表示されるだけでした。誰かがリモートのウェブサイトからのxmlデータを解析するのを手伝ってください。 :「city」の代わりに「City」もありますが、機能していません...よろしくお願いします...

4

2 に答える 2

3

解決策は非常に簡単です(Pekkaのコメントで言及されています)

1.サーバーにファイルを追加しますIAD_proxy.php

2.その中に次のコードを入れます

header("Content-type: text/xml; charset=utf-8");
echo file_get_contents('http://services.faa.gov/airport/status/IAD?format=xml');

3.Ajaxurlリクエストのをに変更しますIAD_proxy.php

他のサーバー側言語を使用している場合は、同じアイデアを実装してみてください。

編集:jQueryを使用したXMLの解析について読んでください。これが私が試したものであり、機能しています。

Javscript:

$.ajax({
        type: "GET",
        url: "IAD_proxy.php",
        dataType: "xml",
        success: function (xml) { 
            alert($(xml).find('City').text());
        },
        error: function (xml) {
            alert(xml.status + ' ' + xml.statusText);
        }
    });

ここで試してみましたdocument.write($(xml).find('City').text());

ここに画像の説明を入力してください

于 2012-08-02T13:56:15.037 に答える
3

サービスがまだxmlを返しているので、それが機能するとは思わない。jsonpは、コールバックに渡す引数としてオブジェクトリテラルを期待しています。これをローカルで実行すると、成功に消費できるデータがないことに気付くと思います。これを試して

$.ajax({
    type: "GET",
    url: "http://services.faa.gov/airport/status/IAD?format=json",
    dataType: "jsonp",
    success: function (data) {
        document.myform.result1.value = data.city;
    },
    error: function (jqXHR, textStatus, errorThrown) {
        alert(errorThrown);
    }
});

asp.net mvc 3を使用してプロキシを作成する例を次に示します。文字列にマップするContentResultを返すアクションを作成しましたが、コンテンツタイプをtext/xmlとして定義します。これは単にサービスにWebリクエストを作成し、ストリームを文字列に読み込んで応答で送り返すだけです。

[HttpGet]
public ContentResult XmlExample()
{
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://services.faa.gov/airport/status/IAD?format=xml");
    string xml = null;
    using (WebResponse response = request.GetResponse())
    {
        using (var xmlStream = new StreamReader(response.GetResponseStream()))
        {
            xml = xmlStream.ReadToEnd();
        } 
    }

    return Content(xml, "text/xml");
}

xmlParser関数は次のようになります。

<script type="text/javascript">
    var result;
    function xmlparser() {
        $.ajax({
            type: "GET",
            url: "XmlExample",
            dataType: "xml",
            success: function (xml) {
                result = $(xml).find("City").text();
                document.myform.result1.value = result;
            },
            error: function (xml) {
                alert(xml.status + ' ' + xml.statusText);
            }
        });             
    }        
</script> 

jQuery ajaxは、内部で$ .parseXMLを使用してデータを変換します。これにより、成功ブロックでこれを呼び出す必要がなくなります。その時点で、デフォルトのDOM関数を使用してCityノードを見つけることができるjQueryオブジェクトができました。

XmlExampleは、コントローラーに基づいてマップされるURLに必ず置き換えてください。

于 2012-08-02T13:37:50.077 に答える