1

StreamReader クラスを使用して、ジオコーディング プロセス用の XML を Google から取得します。

StreamReader srGeoCode = new StreamReader(WebRequest.Create(Url).GetResponse().GetResponseStream());
String GeoCodeXml = srGeoCode.ReadToEnd();
XmlDocument XmlDoc = new XmlDocument();
GeoCode oGeoCode = new GeoCode();
XmlDoc.Load(GeoCodeXml);

XML は返されますが、XML に \n やその他のエクストラが追加されます

<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<kml xmlns=\"http://earth.google.com/kml/2.0\"><Response>\n  <name>

VB に同じコードがありますが、これは実行されません。このコンソール アプリの VB バージョンを使用して、自分の情報を正常にジオコーディングできます。

C# バージョンが、取得した XML にこの余分なデータを追加する理由はありますか? すべてを C# に変換するために最善を尽くしています。私はVBでコーディングを楽しんでいます。

VBコードは次のとおりです。

    Dim wreqGeoCode As WebRequest = WebRequest.Create(strURL)
    Dim wresGeoCode As WebResponse = wreqGeoCode.GetResponse
    Dim srGeoCode As New StreamReader(wresGeoCode.GetResponseStream())
    Dim strXML As String = srGeoCode.ReadToEnd()
    Dim xmlDoc As New XmlDocument
    xmlDoc.LoadXml(strXML)
4

2 に答える 2

4

文字列をロードする場合は、XmlDoc.LoadXml が必要です。ファイルから読み込みます。


ところで、代替手段もより効率的です。ドキュメントをストリームから直接ロードできます。

WebRequest webRequest = WebRequest.Create(Url);
using (WebResponse webResponse = webRequest.GetResponse())
{
    using (Stream responseStream = webResponse.GetResponseStream())
    {
        XmlDocument XmlDoc = new XmlDocument();
        GeoCode oGeoCode = new GeoCode();
        XmlDoc.Load(responseStream);
    }
}

このステートメントにより、例外がスローされた場合でも、およびがusing確実にクリーンアップされます。WebResponseStream

于 2010-05-19T19:09:37.767 に答える
1

するだけじゃない

   GeoCodeXml=GeoCodeXml.Replace("\n","");

ここで述べたように、本当に \n を返している場合。

于 2010-05-19T18:59:21.273 に答える