0

Windows 7 Phone を開発しようとしていて、解析してから Linq クエリを実行する必要がある XML ファイルを使用しています。

問題はこれです:

ファイル (ローカルに保存されている) にアクセスしようとすると、XAP パッケージの一部ではないため、ファイルが見つからないというエラーが返されます。

私が使用する別のソリューションを試しましStreamReaderたが、まだ同様のエラーが発生しています:

メソッドにアクセスしようとして失敗しました System.IO.File.OpenText(System.String)

私が使用しているコードは次のとおりです。

using (StreamReader reader = File.OpenText("C:/Users/Desktop/Assign/obj/Debug/buildings.kml"))
        {
            var xdoc = XDocument.Load ("buildings.kml");
            XNamespace kml = "http://www.opengis.net/kml/2.2";

            var dict = xdoc.Descendants(kml + "Placemark")
                          .ToDictionary(d => d.Element(kml + "name").Value,
                          d => d.Element(kml + "id").Value);

            foreach (var b in dict) {
                Console.WriteLine ("Building Name -> " + b.Key + " Building ID -> " + b.Value);
            }
        }

ファイルは次の場所にあります: > C:/Users/Desktop/Assign/obj/Debug/buildings.kml なので、問題を確認できません。Visual Studio 以外では、.xml ファイルを問題なく読み取ることができます。

誰かが助けてくれることを願っています

編集:

新しいコード -

Dictionary<string, string> getBuildingNames()
    {
        Uri uri = new Uri(@"Data\mydata.kml", UriKind.Relative);

        StreamResourceInfo sri = Application.GetResourceStream(uri);

        StreamReader sr = new StreamReader(sri.Stream);

        var xdoc = XDocument.Load(sr);
        XNamespace kml = "http://www.opengis.net/kml/2.2";

        var dict = xdoc.Descendants(kml + "Placemark")
                      .ToDictionary(d => d.Element(kml + "name").Value,
                      d => d.Element(kml + "id").Value);


        return dict;


    }

エラー: - 「NullReferenceException が未処理でした」

4

2 に答える 2

4

実際に WP7 プロジェクトの一部としてこれを実行しようとしていると仮定すると (前処理など、それに関連するモバイル以外のプロジェクトではなく) File.OpenText、.

オプション:

于 2013-01-25T15:29:48.317 に答える
1

あなたを助けるためのいくつかのヒントがあります:

1) xml ファイルのビルド アクション プロパティを「コンテンツ」に変更します。(ファイルを選択し、Visual Studio のプロパティ ウィンドウに移動します)

2) ファイルから読み取るだけの場合は、ファイルを IsolatedStorage に置く必要はありません。Build Action プロパティを正しく設定すれば、簡単に読み取ることができます。

XDocument を使用してファイルを読み取ることができます。

XDocument xdoc = XDocument.Load(filepath);

ここで、filepathは単純に XML ファイルへの相対パスです。つまり、プロジェクト内のどのフォルダーにも配置しなかった場合は、単なるファイル名になります (ルート ディレクトリであると仮定します)。

于 2013-01-25T18:49:16.930 に答える