Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用LINQtoXML访问特定属性_C#_Xml_Linq_Linq To Xml - Fatal编程技术网

C# 如何使用LINQtoXML访问特定属性

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

我希望访问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" 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);
        }