2010-12-03 104 views
3

我已经创建了一个基本项目,我添加了一个非常简单的xml文件。我可以在项目解决方案中看到该文件和我的一个表单。我试图编写代码来阅读XML文件,但我似乎无法访问它作为视觉工作室似乎没有拿起它那里,如果这是有道理的?我如何获取该文件,这样我就可以做这样的事情C#XML - 读取包含的XML文档

XmlDocument doc = new XmlDocument(); 
doc.Load("My document here") 

感谢

+0

您可以将其设置为嵌入式资源或始终使用复制 – 2010-12-03 12:18:29

回答

3

你是说你添加的XML文件来解决呢?如果是这样,您需要编辑xml文件的属性(在解决方案资源管理器中右键单击并选择属性),并将其设置为始终在构建中复制。这将在构建时将xml文件复制到bin/Debug文件夹,并且这是程序运行的位置。如果没有,则需要将文件路径更改为“../../filename.xml”,这也将起作用。

注意
这只是你的问题的解决方案,如果XML文件是解决方案的一部分,当你运行它的程序没有找到该文件。而且你不能使用绝对路径。

+0

是的,我将xml文件添加到我的解决方案。我现在右键单击xml文件上的属性并将副本设置为输出目录以始终。然而,intellisense仍然不会拿起文件名,除非它不应该? – tom 2010-12-03 12:15:01

0

你需要做的线沿线的东西:

using(XmlTextReader reader = new XmlTextReader ("yourfile.xml")) 
{ 

    while (reader.Read()) 
    { 
     switch (reader.NodeType) 
     { 
      case XmlNodeType.Element: // The node is an element. 
       Console.Write("<" + reader.Name); 
       Console.WriteLine(">"); 
       break; 
      case XmlNodeType.Text: //Display the text in each element. 
       Console.WriteLine (reader.Value); 
       break; 
      case XmlNodeType. EndElement: //Display the end of the element. 
       Console.Write("</" + reader.Name); 
       Console.WriteLine(">"); 
       break; 
     } 
    } 
} 

我假设你要分析你在阅读后的XML文件?

3

将xml文件添加为项目的资源(build action = embedded resource)。并使用:

public static XmlDocument GetEmbeddedXml(Assembly assembly, string fileName) 
    { 
     using (var str = GetEmbeddedFile(assembly, fileName)) 
     { 
      using (var tr = new XmlTextReader(str)) 
      { 
       var xml = new XmlDocument(); 
       xml.Load(tr); 
       return xml; 
      } 
     } 
    } 

    public static Stream GetEmbeddedFile(Assembly assembly, string fileName) 
    { 
     string assemblyName = assembly.GetName().Name; 
     Assembly a = Assembly.Load(assemblyName); 
     Stream str = a.GetManifestResourceStream(assemblyName + "." + fileName); 

     if (str == null) 
      throw new Exception("Could not locate embedded resource '" + fileName + "' in assembly '" + assemblyName + "'"); 
     return str; 

    }