C# C XML-读取包含的XML文档

C# C XML-读取包含的XML文档,c#,xml,visual-studio,C#,Xml,Visual Studio,我创建了一个基本项目,在其中添加了一个非常简单的xml文件。我可以在项目解决方案中看到文件和我的表单。我正试图编写代码来读取xml文件,但我似乎无法访问它,因为visual studio似乎没有意识到它就在那里,如果这有意义的话?我怎样才能得到那个文件,这样我就可以做类似的事情了 XmlDocument doc = new XmlDocument(); doc.Load("My document here") 谢谢您的意思是将xml文件添加到解决方案中?如果是这样,您需要编辑xml文件的属性,

我创建了一个基本项目,在其中添加了一个非常简单的xml文件。我可以在项目解决方案中看到文件和我的表单。我正试图编写代码来读取xml文件,但我似乎无法访问它,因为visual studio似乎没有意识到它就在那里,如果这有意义的话?我怎样才能得到那个文件,这样我就可以做类似的事情了

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

谢谢

您的意思是将xml文件添加到解决方案中?如果是这样,您需要编辑xml文件的属性,在解决方案资源管理器中右键单击并选择“属性”,然后将其设置为“生成时始终复制”。这将在生成时将xml文件复制到bin/Debug文件夹,这是程序运行的起点。如果没有,则需要将文件路径更改为.././filename.xml,这也可以

注:
如果xml文件是解决方案的一部分,并且程序在运行时找不到该文件,那么这只是问题的解决方案。而且您不能使用绝对路径。

您需要按照以下方式执行操作:

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文件后解析它?

将XML文件作为资源添加到您的项目构建操作=嵌入式资源中。和使用:

    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;

    }

是的,我将xml文件添加到我的解决方案中。我现在右键单击了xml文件的属性,并将copy to output directory设置为always。然而,intellisense仍然不会提取文件名,除非它不应该提取文件名?它不会提取文件名,您仍然必须将其作为字符串引用,但现在您可以在不提供任何路径的情况下引用它,因为它将始终位于与输出可执行文件相同的路径中。还有一件事,为了简单起见,我建议使用LINQtoXML来解析XML文件。这是主观上寻找读取xml文件的最简单方法。您可以将其作为嵌入式资源或始终使用副本