如何多次在 XML 文件中找到特定属性?

How could I find specific attribute in XML file multiple time?

我有一个 XML 文档 :

<Results>
  <ResultSet "nothing special" Description="More of nothing" type="system">
    <Results1>
      <time>
        <Body type="system" datatype="int"></Body>
        <att2 type="session" datatype="float"></att2>
      </Result>
      <Result>
        <ID type="system" datatype="int"></ID>
        <Stuff type="session" datatype="float"></Stuff>
      </Result>
      <Result>
        <att1 type="system" datatype="int"></att1>
        <att2 type="session" datatype="int"></att2>
      </Result>
    </Results1>
    <Results2>
      <time>
        <att1 type="session" datatype="int"></att1>
        <att2 type="system" datatype="float"></att2>
      </Result>
      <Result>
        <ID type="system" datatype="float"></ID>
      </Result>
    </Results2>
  </ResultSet>
</Results>

我想使用 C# 获取列表中文档中每个 type = "session" 的路径。目前,我有一个获取路径 XPath 的函数。但是我完全不知道如何在所有 XML 中搜索,无论节点如何。

我正在使用 LINQ to XML、.NET Framework 3.5,这就是我目前拥有的:

    List<string> pathList = new List<string>(); 
    IEnumerable<XElement> path =
        from element in doc.Elements(/*I don't know*/)
        where (string)element.Attribute("type") == "session"
        select element;

    foreach (XElement element in path)
    {
        pathList.Add(getPath(element));
    }

您的 XML 没有一个 XML 属性。 您只有带有文本内容的元素。

您的意思是:

<Results>
  <ResultSet "nothing special" Description="More of nothing" type="system">
    <Results1>
      <time>
        <Body type="system" datatype="int"></Body>
        <att2 type="session" datatype="float"></att2>
      </Result>
      <Result>
        <ID type="system" datatype="int"></ID>
        <Stuff type="session" datatype="float"></Stuff>
      </Result>
      <Result>
        <att1 type="system" datatype="int"></att1>
        <att2 type="session" datatype="int"></att2>
      </Result>
    </Results1>
    <Results2>
      <time>
        <att1 type="session" datatype="int"></att1>
        <att2 type="system" datatype="float"></att2>
      </Result>
      <Result>
        <ID type="system" datatype="float"></ID>
      </Result>
    </Results2>
  </ResultSet>
</Results>

??

您可以使用doc.Descendants()获取所有后代元素:

IEnumerable<XElement> path =
    from element in doc.Descendants()
    where (string)element.Attribute("type") == "session"
    select element;