0

我正在开发 win8 Metro 应用程序,我需要加载 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

我从这里找到了一个解决方案,我使用 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 回答