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

3
我已经创建了一个基本项目,并添加了一个非常简单的XML文件。我可以在项目解决方案中看到该文件和我的一个表单。我正在尝试编写代码来读取XML文件,但似乎无法访问它,因为Visual Studio似乎没有意识到它的存在,如果这样说的话怎么办?我如何获取该文件以便可以执行类似以下操作:
XmlDocument doc = new XmlDocument();
doc.Load("My document here")

谢谢


1
你可以将其作为嵌入式资源或始终使用复制。 - Saeed Amiri
3个回答

4
你是指将xml文件添加到解决方案中吗?如果是,你需要编辑xml文件的属性(在解决方案资源管理器中右键单击并选择属性),然后设置其始终复制到生成目录。这将在构建时将xml文件复制到bin/Debug文件夹中,程序运行也是从那里进行的。如果不是,请将文件路径更改为“../../filename.xml”,这也可以正常工作。
注意: 只有当xml文件是解决方案的一部分且程序无法找到文件时,这才是解决问题的方法。而且你不能使用绝对路径。

是的,我已将XML文件添加到我的解决方案中。我现在右键单击XML文件属性,并将“复制到输出目录”设置为“始终”。但是,Intellisense仍然无法捕获文件名,除非它不应该? - tom
它不会自动获取文件名,你仍然需要将其作为字符串引用,但现在你可以在不提供任何路径的情况下引用它(因为它总是与输出可执行文件位于同一路径中)。 - BeRecursive
还有一件事,为了简单起见,我建议使用LINQ to XML来解析XML文件。这是(当然是主观的)读取xml文件的最简单方法。 - Alxandr

3

将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;

    }

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接