如何使用 Xml Linq 检索具有多个级别的属性值?
How to retrieve attributes value with multiple level using Xml Linq?
我有一个这样的 xml :
<?xml version="1.0" encoding="iso-8859-1" ?>
<Menu>
<Group Flow="Horizontal">
<Item Text="Basket" >
<Item Text="Favorites">
<Item Text="Add" Roles="SuperAdmin">
<Item Text="Evaluation" Roles="Admin">
</Item>
<Item Text="Titularisation" Roles="users,Admin">
</Item>
</Item>
</Group>
</Menu>
我想检索所有属性 "Roles".
我试过了:
XElement rootElement = XElement.Load(@"C:\Users\TTM\Desktop\GeneralMenu.xml");
XElement menuElt = rootElement.Element("Group");
var itemsAdd = from el in menuElt.Descendants("Item")
where (string)el.Attribute("Text") == "Add"
select el;
foreach (var item in itemsAdd)
{
Console.WriteLine(item.Attribute("Roles").Value);
}
Console.Read();
但我只得到了这个应答器的 "Roles":
<Item Text="Add" Roles="SuperAdmin">
试试这个:-
XDocument xdoc = XDocument.Load(XMLFile);
var itemAdd = xdoc.Descendants("Item")
.Where(x => (string)x.Attribute("Text") == "Add")
.Select(x => new
{
Roles = (string)x.Attribute("Roles"),
ChildRoles = x.Descendants("Item")
.Select(z => (string)z.Attribute("Roles")).ToList()
});
此处,Roles
将包含来自您的父节点的角色,ChildRoles
将包含存在于添加文本的父节点的后代中的所有角色。
然后您可以使用 foreach
循环访问它们:-
foreach (var item in itemAdd)
{
Console.WriteLine(item.Roles);
foreach (var childRoles in item.ChildRoles)
{
Console.WriteLine(childRoles);
}
}
如果您希望在一个 属性 中获取所有角色,那么您可以这样获取它:-
Roles = x.Descendants("Item").Select(z => (string)z.Attribute("Roles"))
.Concat(new List<string> { (string)x.Attribute("Roles") }).ToList()
我有一个这样的 xml :
<?xml version="1.0" encoding="iso-8859-1" ?>
<Menu>
<Group Flow="Horizontal">
<Item Text="Basket" >
<Item Text="Favorites">
<Item Text="Add" Roles="SuperAdmin">
<Item Text="Evaluation" Roles="Admin">
</Item>
<Item Text="Titularisation" Roles="users,Admin">
</Item>
</Item>
</Group>
</Menu>
我想检索所有属性 "Roles".
我试过了:
XElement rootElement = XElement.Load(@"C:\Users\TTM\Desktop\GeneralMenu.xml");
XElement menuElt = rootElement.Element("Group");
var itemsAdd = from el in menuElt.Descendants("Item")
where (string)el.Attribute("Text") == "Add"
select el;
foreach (var item in itemsAdd)
{
Console.WriteLine(item.Attribute("Roles").Value);
}
Console.Read();
但我只得到了这个应答器的 "Roles":
<Item Text="Add" Roles="SuperAdmin">
试试这个:-
XDocument xdoc = XDocument.Load(XMLFile);
var itemAdd = xdoc.Descendants("Item")
.Where(x => (string)x.Attribute("Text") == "Add")
.Select(x => new
{
Roles = (string)x.Attribute("Roles"),
ChildRoles = x.Descendants("Item")
.Select(z => (string)z.Attribute("Roles")).ToList()
});
此处,Roles
将包含来自您的父节点的角色,ChildRoles
将包含存在于添加文本的父节点的后代中的所有角色。
然后您可以使用 foreach
循环访问它们:-
foreach (var item in itemAdd)
{
Console.WriteLine(item.Roles);
foreach (var childRoles in item.ChildRoles)
{
Console.WriteLine(childRoles);
}
}
如果您希望在一个 属性 中获取所有角色,那么您可以这样获取它:-
Roles = x.Descendants("Item").Select(z => (string)z.Attribute("Roles"))
.Concat(new List<string> { (string)x.Attribute("Roles") }).ToList()