如何使用LINQ to XML访问特定属性

时间:2014-09-29 16:19:53

标签: c# xml linq 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>

4 个答案:

答案 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);
        }