C# 如何使用LINQtoXML访问特定属性
我希望访问XML文件中的某些特定属性(标记名),并将它们放在列表中,但我无法正确获取它们。我做错了什么 列表应如下所示:C# 如何使用LINQtoXML访问特定属性,c#,xml,linq,linq-to-xml,C#,Xml,Linq,Linq To Xml,我希望访问XML文件中的某些特定属性(标记名),并将它们放在列表中,但我无法正确获取它们。我做错了什么 列表应如下所示: Tag_1 Tag_2 Tag_3 代码: 以下是XML文件: <configuration> <logGroup> <group name="cpm Log 1h 1y Avg" logInterval="* 1 * * * ?" /> <group name="cpm Log 1d 2y Avg" logIn
Tag_1
Tag_2
Tag_3
代码:
以下是XML文件:
<configuration>
<logGroup>
<group name="cpm Log 1h 1y Avg" logInterval="* 1 * * * ?" />
<group name="cpm Log 1d 2y Avg" logInterval="* 10 * * * ?" />
</logGroup>
<tagGroup>
<tag name="Tag_1">
<property name="VALUE">
<logGroup name="cpm Log 1h 1y Avg" />
<logGroup name="cpm Log 1d 2y Avg" />
</property>
</tag>
<tag name="Tag_2">
<property name="VALUE">
<logGroup name="cpm Log 1h 1y Avg" />
<logGroup name="cpm Log 1d 2y Avg" />
</property>
</tag>
<tag name="Tag_3">
<property name="VALUE">
<logGroup name="cpm Log 1h 1y Avg" />
<logGroup name="cpm Log 1d 2y Avg" />
</property>
</tag>
</tagGroup>
</configuration>
只需更改linq查询即可:
var tagNames = from tag in xelement.Elements("tagGroup").Elements("tag")
select tag.Attribute("name").Value;
然后标记名是一个IEnumerable,您可以这样迭代:
foreach (var element in tagNames)
{
//element is a string
}
代码通过名为tagGroup的元素进行枚举,然后尝试获取名为的属性。标记组中没有属性。事实上,tagGroup有两个级别,称为logGroup。日志组具有name属性 此代码将不起作用:
XElement xelement = XElement.Load("C:/...../Desktop/Testxml.xml");
var tagNames = from tag in xelement.Elements("tagGroup")
select tag.Attribute("name").Value;
你需要的是
var tagGroups = xelement.Descendants("tag").Select(x => x.Attribute("name")).ToList();
或者,如果您想与其他人分享:
var tagGroups = xelement.Descendants("logGroup").Select(x => x.Attribute("name")).ToList();
var tagGroups = xelement.Elements("tagGroup").ToList();
var logGroups = tagGroups.SelectMany (g => g.Descendants("logGroup")).ToList();
var logAttributes = tagGroups.SelectMany (g => g.Descendants("logGroup").Select(x => x.Attribute("name"))).ToList();
试试这个
var tagNames = from tag in xelement.Elements("tagGroup").Elements("tag")
select tag.Attribute("name").Value;
或
比如:
var tagNames = xe.Element("tagGroup").Elements("tag").Select(a => a.Attribute("name").Value);
foreach (var xEle in tagNames)
{
Console.WriteLine(xEle);
}
var tagNames = xelement.Elements("tagGroup")
.Elements("tag")
.Attribute("name").Value;
var tagNames = xe.Element("tagGroup").Elements("tag").Select(a => a.Attribute("name").Value);
foreach (var xEle in tagNames)
{
Console.WriteLine(xEle);
}