2014-09-29 73 views
0

希望访问一些特定的属性(标签名称)我的XML文件,并将其放置在列表中,但我不能让我的权利。我究竟做错了什么??我如何访问使用LINQ的特定属性以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

只是改变你的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 
} 
0

你的代码枚举通过名为tagGroup的元素,然后试图获取名为名称的属性。 tagGroup中没有属性。实际上tagGroup具有深层次的两个级别,称为logGroup。它是具有name属性的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(); 
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; 
0

类似:

var tagNames = xe.Element("tagGroup").Elements("tag").Select(a => a.Attribute("name").Value); 
foreach (var xEle in tagNames) 
     { 
      Console.WriteLine(xEle); 
     }