使用 Linq 加载重复命名的 XML 节点 [C#]
我正在开发一个需要能够从 XML 文件加载对象属性的程序。这些属性可由用户配置,并且 XML 对我来说使用起来很有意义。
获取以下 XML 文档。
<?xml version="1.0" encoding="utf-8" ?>
<udpcommands>
<command name="requser">
<cvar name="reqchallege" value="false" />
</command>
<command name="reqprocs">
<cvar name="reqchallenge" value="false" />
</command>
</udpcommands>
我需要能够将上面的 cvar 中的值加载到属性中。我认为 Linq-To-XML 会很适合(我正在寻找 Linq 的应用程序,以便我可以学习它)。我已经完成了 Linq-to-XML 查询,以根据名称选择正确的“命令”。我正在阅读 MSDN 获取有关此问题的帮助。
以下代码片段位于一个构造函数中,该构造函数采用参数“字符串名称”,该参数标识要拉取的正确 XML
。
我想要一个 linq 语句来从给定节名称的 XML 中提取每个
,将所有内容转储到 IEnumerable。或者,我正在寻找也许是为了更好的选择。我真的对任何事情都持开放态度。我只是想使用 Linq 这样我可以更好地学习它。
XElement doc = XElement.Load("udpcommands.xml");
IEnumerable<XElement> a = from el in doc.Elements()
where el.FirstAttribute.Value == name
select el;
foreach (var c in a)
{
Console.WriteLine(c);
}
上面的代码片段向控制台输出以下内容:
<command name="requser">
<cvar name="reqchallege" value="false" />
</command>
I'm working on a program that needs to be able to load object-properties from an XML file. These properties are configurable by the user and XML makes sense to me to use.
Take the following XML document.
<?xml version="1.0" encoding="utf-8" ?>
<udpcommands>
<command name="requser">
<cvar name="reqchallege" value="false" />
</command>
<command name="reqprocs">
<cvar name="reqchallenge" value="false" />
</command>
</udpcommands>
I need to be able to load values from the cvars above to properties. I'm think Linq-To-XML would be good for it (I'm looking for applications of Linq so I can learn it). I've got a Linq-to-XML query done to select the right "command" based on the name.I was reading MSDN for help on this.
The following code snippet goes in a constructor that takes the parameter "string name" which identifies the correct XML <command>
to pull.
I would like to have one linq statement to pull each <cvar>
out of that XML given the section name, dumping everything to an IEnumerable. Or, I'm looking for a better option perhaps. I'm open for anything really. I would just like to use Linq so I can learn it better.
XElement doc = XElement.Load("udpcommands.xml");
IEnumerable<XElement> a = from el in doc.Elements()
where el.FirstAttribute.Value == name
select el;
foreach (var c in a)
{
Console.WriteLine(c);
}
The above code snippet outputs the following to the console:
<command name="requser">
<cvar name="reqchallege" value="false" />
</command>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
应该这样做:
这将为您提供一个
IEnumerable
,其中每个XElement
代表指定命令中的一个cvar
。请注意,如果指定的命令不存在,则调用 Single 将导致错误。同样,如果在命令中找不到指定的属性。
编辑根据您的评论,您可以执行以下操作:
Something like this should do:
This will give you an
IEnumerable<XElement>
where eachXElement
represents acvar
in the specified command.Note that if the specified command does not exist, the call to Single will cause an error. Likewise if the specified attribute is not found on the command.
EDIT As per your comments, you could do something along the lines of: