C# 使用xmlreader读取xmldocument中的xml
我正在开发win8 metro应用程序,我需要加载xml文件以在应用程序上显示。 但在加载文件夹中的xml文件后,我遇到了一个问题 我知道我可以使用xmlreader在应用程序本身中读取xml文件,但我不知道如何将文件加载到“我的文档”或应用程序外的任何其他文件夹中。所以我在谷歌上搜索它,我发现我可以使用wait XmlDocument.LoadFromFileAsync(file)来加载,但我不知道如何让xmlreader读取我在XmlDocument中加载的文件 或者有一种方法可以让xmlreader从应用程序中加载xml文件 我试图为xmlreader设置文件路径,但它总是响应“未找到文件”,路径是从我的开发目录开始,但不是从我设置的路径开始 有人能帮我吗 下面是我如何处理xmlreader的,所以我希望xmldocument中的文件可以通过这种方式处理: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
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”)代码>