XML获取特定名称

时间:2013-03-19 22:57:37

标签: c# xml linq linq-to-xml

我有一个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的所有名称。

2 个答案:

答案 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"));