C# 使用xmlreader读取xmldocument中的xml

C# 使用xmlreader读取xmldocument中的xml,c#,xml,microsoft-metro,xmldocument,xmlreader,C#,Xml,Microsoft Metro,Xmldocument,Xmlreader,我正在开发win8 metro应用程序,我需要加载xml文件以在应用程序上显示。 但在加载文件夹中的xml文件后,我遇到了一个问题 我知道我可以使用xmlreader在应用程序本身中读取xml文件,但我不知道如何将文件加载到“我的文档”或应用程序外的任何其他文件夹中。所以我在谷歌上搜索它,我发现我可以使用wait XmlDocument.LoadFromFileAsync(file)来加载,但我不知道如何让xmlreader读取我在XmlDocument中加载的文件 或者有一种方法可以让xmlr

我正在开发win8 metro应用程序,我需要加载xml文件以在应用程序上显示。 但在加载文件夹中的xml文件后,我遇到了一个问题

我知道我可以使用xmlreader在应用程序本身中读取xml文件,但我不知道如何将文件加载到“我的文档”或应用程序外的任何其他文件夹中。所以我在谷歌上搜索它,我发现我可以使用wait 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][];

                                            ....

根据对您问题的描述,我认为您需要这样做,以便从设备中选择一个文件

 //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文件夹


我想得更多

根据您的问题描述,我认为您需要执行类似操作,以便从设备中选择文件

 //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文件夹

我想得更多

我从中找到了一个解决方案,我使用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()));
我从中找到了一个解决方案,我使用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()));

描述您的情况的示例代码将有所帮助。提示:总是粘贴一个代码示例,以便更清楚地说明您的问题。您是否真的想使用
XmlReader
?与其他API相比,它是一个相当丑陋的API,尤其是LINQ到XML。涉及的XML文件很大吗?XML文件不会具有相同的属性或相同的子节点,因此我无法在中指定节点的名称code@Bency但是您已经使用了字符串,比如
“数量”
“主题”
@L.B.hmm。。我不知道如何移动到下一个节点或下一个元素,例如while(reader.read())描述您的情况的示例代码将有所帮助。提示:总是粘贴一个代码示例,以便更清楚地说明您的问题。您是否真的想使用
XmlReader
?与其他API相比,它是一个相当丑陋的API,尤其是LINQ到XML。涉及的XML文件很大吗?XML文件不会具有相同的属性或相同的子节点,因此我无法在中指定节点的名称code@Bency但是您已经使用了字符串,比如
“数量”
“主题”
@L.B.hmm。。我不知道如何移动到下一个节点或下一个元素,如while(reader.read())感谢您的回答,但我不在此应用程序中使用文件选择器,我希望应用程序可以自动加载文件。再次感谢!找不到路径“C:\Users\Bency\Dropbox\student\u client\Live\u Test\bin\Debug\AppX\%UserProfile%\My Documents\documents2010113\u 002.xml”的一部分。很抱歉,这不起作用请尝试以下操作:
var folder=Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);var path=path.Combine(文件夹,“file.xml”)感谢您的回答,但我不在此应用程序中使用文件选择器,我希望应用程序可以自动加载文件。再次感谢!找不到路径“C:\Users\Bency\Dropbox\student\u client\Live\u Test\bin\Debug\AppX\%UserProfile%\My Documents\documents2010113\u 002.xml”的一部分。很抱歉,这不起作用请尝试以下操作:
var folder=Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);var path=path.Combine(文件夹,“file.xml”)