0

私はwin8メトロアプリを開発しています.xmlファイルを読み込んでアプリに表示する必要があります。しかし、フォルダーにある xml ファイルを読み込んだ後に問題が発生しました。

アプリ自体でxmlreaderを使用してxmlファイルを読み取ることができることは知っていますが、「マイドキュメント」またはアプリから他のフォルダーにファイルをロードする方法がわかりません。だから私はそれをグーグルで調べたところ、await XmlDocument.LoadFromFileAsync(file) を使用してロードできることがわかりましたが、xmlreader を作成して xmldocument にロードしたファイルを読み取る方法がわかりません。

または、xmlreader がアプリから xml ファイルをロードできる方法はありますか?

xmlreader のファイル パスを入力しようとしましたが、常に「ファイルが見つかりません」と応答し、ルートは開発ディレクトリから開始されますが、設定したパスから開始されません。

誰でも私を助けることができますか?

以下は私がxmlreaderを扱う方法ですので、xmldocumentからのファイルがこの方法で処理できることを願っています:

            XmlReader reader = XmlReader.Create(@"Data/question/" + file_name);
            while (reader.Read())
            {
                //                subject.Text += "start-node:\n";
                switch (reader.NodeType)
                {
                    case XmlNodeType.Element:
                        Element = reader.Name;

                        //                        subject.Text += String.Format("Element: {0}\n", reader.Name);
                        if (reader.HasAttributes)
                        {
                            //                            subject.Text += String.Format("Attributes of " + reader.Name + "\n");
                            while (reader.MoveToNextAttribute())
                            {
                                switch (Element)
                                {
                                    case "SUBJECT":
                                        switch (reader.Name)
                                        {
                                            case "TYPE":
                                                type = int.Parse(reader.Value);
                                                if (start_type == 999)
                                                {
                                                    start_type = type;
                                                    Save_para("Start_Type", start_type);
                                                }
                                                last_sn += sn;
                                                sn = 0;
                                                break;
                                            case "QUANTITY":
                                                quantity = int.Parse(reader.Value);
                                                question[type] = new string[quantity + 1][];

                                            ....
4

2 に答える 2

2

hereから解決策を見つけました。StringReader を使用して xmldocument を読み取り、xmlreader によってロードされます。

            StorageFolder folder = await KnownFolders.DocumentsLibrary.CreateFolderAsync("documents", CreationCollisionOption.OpenIfExists);
            StorageFile file = await folder.GetFileAsync(file_name);
            XmlDocument reade = await XmlDocument.LoadFromFileAsync(file);
            //XmlReader reader = XmlReader.Create(@"Data/question/" + file_name);
            XmlReader reader = XmlReader.Create(new StringReader(reade.GetXml()));
于 2012-11-05T07:28:13.687 に答える
1

問題の説明から、デバイスからファイルを選択するには、このようなことをする必要があると思います

 //function to read an XML file form the local device
 private async void SelectXMLButton_Click(object sender, RoutedEventArgs e)
    {
        var filePicker = new Windows.Storage.Pickers.FileOpenPicker();
        //addign a a filter so only XML files will show up.
        filePicker.FileTypeFilter.Add(".xml");

        var selectedXMlFile = await filePicker.PickSingleFileAsync();
        // now your reader should open the file
        XmlReader reader = XmlReader.Create(selectedXMlFile.Path);

    }

関数をテストしていないことに注意してください。ただし、機能するはずです。

更新: // つまり ... 私のドキュメントからファイルにアクセスすることができます:

XmlReader reader = XmlReader.Create(@"%UserProfile%\My Documents\file.xml");

また、Appmanifest ファイルの Capabilities タブから Documents フォルダーへのアクセスを許可する必要があります。

これでさらにお役に立てると思います。

于 2012-10-31T10:49:13.943 に答える