1

我有这个 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();

我想检索工作“标题”等于管理员的所有名称。

4

2 回答 2

2

@Xtian 的解决方案是正确的。这是 XPath 解决方案:

var workers = workerElement.XPathSelectElements("//worker[@job='admin']")
                           .Select(w => (string)w.Attribute("name"));
于 2013-03-19T23:10:44.153 回答
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"));
于 2013-03-19T23:06:54.377 回答