【问题标题】:C# XML - Reading Included XML DocumentC# XML - 读取包含的 XML 文档
【发布时间】:2010-12-03 12:05:50
【问题描述】:

我创建了一个基本项目,并在其中添加了一个非常简单的 xml 文件。我可以在项目解决方案中看到文件和我的一个表单。我正在尝试编写代码来读取 xml 文件,但我似乎无法访问它,因为如果这有意义的话,Visual Studio 似乎并没有发现它在那里?我如何获取该文件以便我可以执行类似的操作

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

谢谢

【问题讨论】:

  • 您可以将其作为嵌入式资源或始终使用副本

标签: c# xml visual-studio


【解决方案1】:

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

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

【讨论】:

  • 是的,我将 xml 文件添加到我的解决方案中。我现在右键单击 xml 文件上的属性并将复制到输出目录设置为始终。但是,除非不应该,否则智能感知仍然不会提取文件名?
  • 它不会获取文件名,您仍然需要将其作为字符串引用,但现在您可以在不提供任何路径的情况下引用它(因为它始终位于同一路径中作为输出可执行文件)
  • 另外,还有一件事,为了简单起见,我建议使用 LINQ to XML 来解析 XML 文件。这是(主观寻找原因)读取 xml 文件的最简单方法。
【解决方案2】:

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

    }

【讨论】:

    【解决方案3】:

    您需要按照以下方式做一些事情:

    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 文件后对其进行解析?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-23
      • 2015-03-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多