我有一个XML的例子
<work>
<worker name="Jason" job="admin">
<worker name="Frank" job="employee">
<worker name="John" job="admin">
<work>
我正在尝试使用作业管理员检索工作人员姓名。
这是我当前代码的一部分。此代码将检索所有工作人员。
Worker = workerElement.Elements("work")
.Elements("worker")
.Select(c => (string)c.Attribute("name"))
.ToArray();
我一直在尝试以下解决方案
Worker = workerElement.Elements("work")
.Elements("worker")
.Select(c => (string)c.Attribute("name[@job='admin']"))
.ToArray();
我想检索作业“title”等于admin的所有名称。
答案 0 :(得分:2)
@Xtian的解决方案是正确的。这是XPath解决方案:
var workers = workerElement.XPathSelectElements("//worker[@job='admin']")
.Select(w => (string)w.Attribute("name"));
答案 1 :(得分:1)
首先,你的xml有一些错误,我已在下面更正了它:
<work>
<worker name="Jason" job="admin" />
<worker name="Frank" job="employee" />
<worker name="John" job="admin" />
</work>
然后,如果你正在尝试使用Linq,请尝试使用:
Worker = workerElement.Elements("work")
.Elements("worker")
.Where(c => (string)c.Attribute("job") == "admin")
.Select(c => (string)c.Attribute("name"))
.ToArray();
或者,如果您使用的是XPath,则可以使用:
var admins = workerElement.XPathSelectElements("//worker[@job='admin']")
.Select(w => (string)w.Attribute("name"));