2

[C# .NET 4.0 WinForm LINQ]

我有一个 XML 文件,我将其添加到我的项目中Content,但我现在必须将其设置为内部的嵌入式资源,以便它可以与可执行文件一起编译,并且我不必为应用程序创建安装/部署包.

但是,我有使用 LINQ 查询 XML 文件的现有代码,由于我已将该文件设为嵌入式资源,因此该代码无法正常工作。如果 XML 文件是嵌入式资源而不是内容资源,我需要做些什么不同的事情才能查询 XML 文件?我见过一些

查询 XML 文件后,我会遍历结果并将它们加载到列表框中。这是我用来查询 XML 文件的代码,当它设置Content为时,我的循环将添加到列表框中:

var computers = from e in XElement.Load(@"MyXML.xml").Elements("computer")
        select (string)e.Element("name");

foreach (var c in computers)
{
    if (!IsNullOrEmpty(computer))
    {
        lstComputer.BeginUpdate();
        lstComputer.Items.Add(computer);
        lstComputer.EndUpdate();
    }
}

我见过其他一些例子,比如这个,它们使用程序集将文件读入字符串......这是我必须做的吗?不要进一步揭示我内心的菜鸟,但如果是这种情况,上面链接中的示例是否返回一个分隔字符串,我可以循环访问,以便将项目添加到我的列表框中?

谢谢...

4

2 回答 2

3

将嵌入资源作为流打开:

XElement doc;
using (var stream = typeof(SomeTypeInTheAssembly).Assembly
                        .GetManifestResourceStream("MyXML.xml"))
{
    doc = XElement.Load(stream);
}

无需通过中间字符串表示。

于 2013-05-22T12:53:36.387 回答
0

根据 Jon Skeet 的回答,您可以使用 Assembly.GetExecutingAssembly() 让事情变得更容易一些:

using System.Reflection;

XElement doc;
using (var stream = Assembly.GetExecutingAssembly().
                    .GetManifestResourceStream("MyNameSpace.MyXML.xml"))
{
    doc = XElement.Load(stream);
}
于 2015-02-03T12:41:22.530 回答