[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();
}
}
我已经看到了一些其他的例子,比如this one,它们使用程序集将文件读入字符串......这就是我要做的事情吗?不要进一步揭示我的内部菜鸟,但如果是这种情况,上面链接中的示例是否返回一个我可以循环的分隔字符串,以便我可以将项目添加到我的列表框中?
...谢谢
答案 0 :(得分:3)
以流形式打开嵌入式资源:
XElement doc;
using (var stream = typeof(SomeTypeInTheAssembly).Assembly
.GetManifestResourceStream("MyXML.xml"))
{
doc = XElement.Load(stream);
}
无需通过中间字符串表示。
答案 1 :(得分:0)
根据Jon Skeet的回答,您可以使用Assembly.GetExecutingAssembly()来简化操作:
using System.Reflection;
XElement doc;
using (var stream = Assembly.GetExecutingAssembly().
.GetManifestResourceStream("MyNameSpace.MyXML.xml"))
{
doc = XElement.Load(stream);
}