[英]How to access a specific attribute using LINQ to XML
我希望訪問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>
只需將您的linq查詢更改為:
var tagNames = from tag in xelement.Elements("tagGroup").Elements("tag")
select tag.Attribute("name").Value;
然后tagName是IEnumerable <string> ,您可以像這樣迭代:
foreach (var element in tagNames)
{
//element is a string
}
您的代碼枚舉名為tagGroup的元素,然后嘗試獲取名為name的屬性。 tagGroup中沒有屬性。 實際上,tagGroup具有兩個稱為logGroup的后代。 具有名稱屬性的logGroup。
此代碼將不起作用:
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 = 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);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.