Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用LINQ查询嵌入式XML文件?_C#_.net_Winforms_Linq_Linq To Xml - Fatal编程技术网

C# 如何使用LINQ查询嵌入式XML文件?

C# 如何使用LINQ查询嵌入式XML文件?,c#,.net,winforms,linq,linq-to-xml,C#,.net,Winforms,Linq,Linq To Xml,[C#.NET 4.0 WinForm LINQ] 我在项目中添加了一个XML文件作为内容,但现在我必须将其作为一个内部嵌入式资源,这样它将与可执行文件一起编译,而不必为应用程序创建安装/部署包 但是,我已经有了使用LINQ查询XML文件的现有代码,但由于我已经将该文件作为嵌入式资源,因此该代码无法工作如果XML文件是嵌入式资源,与作为内容资源时相比,我需要做哪些不同的操作才能查询该XML文件?我看到了一些 查询XML文件后,我循环遍历结果并将其加载到列表框中。下面是当XML文件设置为Conte

[C#.NET 4.0 WinForm LINQ]

我在项目中添加了一个XML文件作为
内容
,但现在我必须将其作为一个内部嵌入式资源,这样它将与可执行文件一起编译,而不必为应用程序创建安装/部署包

但是,我已经有了使用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();
    }
}
我见过其他一些例子,比如,使用程序集将文件读入字符串……这就是我必须要做的吗?不是为了进一步揭示我的内部noob,但是如果是这样的话,上面链接中的示例是否会返回一个分隔字符串,我可以循环使用它,以便将这些项目添加到我的列表框中


谢谢…

将嵌入式资源作为流打开:

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

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

根据Jon Skeet的回答,您可以使用Assembly.getExecutionGassembly()使事情变得简单一点:

使用系统反射;
XElement文件;
使用(var stream=Assembly.getExecutionGassembly()。
.GetManifestResourceStream(“MyNameSpace.MyXML.xml”))
{
doc=XElement.Load(流);
}

这需要对IO和反射命名空间的引用,对吗?另外,您是否可以提供有关汇编中的
sometypeinAssembly
的更多详细信息?@user2063351:no,no
使用所需的
指令。
SomeTypeInTheAssembly
的要点在于您选择了正确程序集中的任何类型-您只是试图指定要从哪个程序集中获取流。因此,这个代码出现的类型可能很好,但我不知道它叫什么…很抱歉,太密集了…一个有效的
typeof(SomeTypeInTheAssembly)
是“XML”吗?如果我正在创建Windows窗体,我是否最适合使用
this.GetType().Assembly
而不是
typeof(SomeTypeInTheAssembly.Assembly
?@user2063351:我不知道-在正确的程序集中有一个名为
XML
的类?如果它在实例方法中,当然可以使用
this.GetType()
。好的,我没有这两种方法。如何找到要在程序集中使用的类型?当我将XML文件设置为嵌入式资源时,Visual Studio是否应该向AssemblyInfo.cs文件添加一些内容?