我希望访问某个特定属性(标记名称)我是一个XML文件,并将它们放在列表中,但我不能让我正确。我做错了什么?
列表应如下所示:
Tag_1
Tag_2
Tag_3
代码:
XElement xelement = XElement.Load("C:/...../Desktop/Testxml.xml");
var tagNames = from tag in xelement.Elements("tagGroup")
select tag.Attribute("name").Value;
foreach (XElement xEle in tagNames)
{
//....
}
这是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>
答案 0 :(得分:0)
只需更改您的linq查询:
var tagNames = from tag in xelement.Elements("tagGroup").Elements("tag")
select tag.Attribute("name").Value;
然后tagName是 IEnumerable&lt; string&gt; ,您可以像这样迭代:
foreach (var element in tagNames)
{
//element is a string
}
答案 1 :(得分:0)
您的代码枚举名为tagGroup的元素,然后尝试获取被调用名称中的属性。 tagGroup中没有属性。事实上,tagGroup的后代有两个级别,称为logGroup。它的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();
答案 2 :(得分:0)
试试这个......
var tagNames = from tag in xelement.Elements("tagGroup").Elements("tag")
select tag.Attribute("name").Value;
或
var tagNames = xelement.Elements("tagGroup")
.Elements("tag")
.Attribute("name").Value;
答案 3 :(得分:0)
喜欢的东西:
var tagNames = xe.Element("tagGroup").Elements("tag").Select(a => a.Attribute("name").Value);
foreach (var xEle in tagNames)
{
Console.WriteLine(xEle);
}