我在读取xml文件中的值时遇到了麻烦。 这是xml文件:
<root>
<defaultGroups name="Sikker">
<group name="0ASK" />
<group name="0ASKAPP" />
<group name="0ASKFELLES" />
<group name="0SYSAPP" />
<group name="0SYSAPPoffice" />
<group name="10WTS" />
</defaultGroups>
<defaultGroups name="Intern">
<group name="11WTS" />
<group name="1ASK" />
<group name="1ASKAPP" />
<group name="1ASKFELLES" />
<group name="Domain Users" />
<group name="Askvoll brukere" />
<group name="1SYSAPP" />
<group name="1SYSAPPAdobeReader" />
<group name="1SYSAPPEXCEL" />
<group name="1SYSAPPIEXPLORER" />
<group name="1SYSAPPOUTLOOK" />
<group name="1SYSAPPPOWERPOINT" />
<group name="1SYSAPPWORD" />
</defaultGroups>
</root>
使用下面显示的函数,我应该只读取<defaultGroups name="Sikker">
中的值。我得到第一个值:“0ASK”,但不是其余的。有人可以帮我这个吗? (我是Linq的新手)
这是我使用的C#函数:
public string GetSikkerSoneDefaultGroups(string companyName)
{
string sikkerSone = "";
XDocument doc = XDocument.Load("xml\\defaults\\" + companyName + ".xml");
var groups = from defaultGroups in doc.Descendants("defaultGroups")
where defaultGroups.Attribute("name").Value == "Sikker"
select new
{
g = defaultGroups.Element("group").Attribute("name").Value
};
foreach (var group in groups)
{
sikkerSone += group.g + ";";
}
doc = null;
return sikkerSone;
}
答案 0 :(得分:2)
您正在使用:
g = defaultGroups.Element("group").Attribute("name").Value
仅选择defaultGroups的第一个子元素。我认为我们可以简化这一点,因为你接近它的方式你需要一个子查询。为什么不直接获取组元素?
var groups = from defaultGroup in doc.Descendants("group")
where defaultGroup.Parent.Attribute("name").Value == "Sikker"
select defaultGroup.Attribute("name").Value;
// Make it into a string
foreach (var group in groups)
{
sikkerSone += group + ";";
}
答案 1 :(得分:0)
string sikkerSone = string.Join(";",
(from dg in doc.Descendants("defaultGroups")
where dg.Attribute("name") == "Sikker"
from g in dg.Elements("group")
select (string)g.Attribute("name"))
.ToArray());