Linq2Xml - 根据 children 的属性值获取 parent 项
Linq2Xml - Getting parent items based on their children's attribute value
我有一个简单的xml:
<forms for="ApplicationTestSettings">
<form name="Parameter12Settings" title="Parameter12 Settings" url="/Parameter12Settings">
<roles>
<role name="Parameter12-Reader" />
<role name="Parameter12-Writer" can-add="1" can-edit="1" can-delete="0" />
</roles>
</form>
<form name="Parameter34Settings" title="Parameter 34 Settings" url="/Parameter34Settings">
<roles>
<role name="Parameter34-Reader" />
<role name="Parameter34-Writer" can-add="1" can-edit="1" can-delete="0" />
</roles>
</form>
</forms>
我需要一个基于角色元素属性值的表单集合。我有一个列表:
List<string> roles = new List<string>();
roles.Add("Parameter12-Reader");
roles.Add("Parameter34-Writer");
我尝试使用此查询获取项目:
var forms = root.Descendants("form")
.Where(form => roles.Contains(form.Element("roles")
.Element("role")
.Attribute("name").Value)).ToList();
不幸的是,此查询仅分析所有 form/roles 块中的第一个角色。谁能告诉我,我如何定义此查询以获取所有表单元素,其中角色列表包含 xml 角色名称?
谢谢,
D.
尝试
var forms = root.Descendants("form")
.Where(form => form.Elements("roles")
.Elements("role")
.Attributes("name")
.Any(n => roles.Contains(n.Value))
).ToList();
我有一个简单的xml:
<forms for="ApplicationTestSettings">
<form name="Parameter12Settings" title="Parameter12 Settings" url="/Parameter12Settings">
<roles>
<role name="Parameter12-Reader" />
<role name="Parameter12-Writer" can-add="1" can-edit="1" can-delete="0" />
</roles>
</form>
<form name="Parameter34Settings" title="Parameter 34 Settings" url="/Parameter34Settings">
<roles>
<role name="Parameter34-Reader" />
<role name="Parameter34-Writer" can-add="1" can-edit="1" can-delete="0" />
</roles>
</form>
</forms>
我需要一个基于角色元素属性值的表单集合。我有一个列表:
List<string> roles = new List<string>();
roles.Add("Parameter12-Reader");
roles.Add("Parameter34-Writer");
我尝试使用此查询获取项目:
var forms = root.Descendants("form")
.Where(form => roles.Contains(form.Element("roles")
.Element("role")
.Attribute("name").Value)).ToList();
不幸的是,此查询仅分析所有 form/roles 块中的第一个角色。谁能告诉我,我如何定义此查询以获取所有表单元素,其中角色列表包含 xml 角色名称?
谢谢, D.
尝试
var forms = root.Descendants("form")
.Where(form => form.Elements("roles")
.Elements("role")
.Attributes("name")
.Any(n => roles.Contains(n.Value))
).ToList();