如何在XDocument中循环使用c#

本文关键字:循环 XDocument | 更新日期: 2023-09-27 18:17:50

我的表和td值如下代码

foreach (var descendant in xmlDoc.Descendants("thead"))           
{             
    var title = descendant.Element("td1 style=background:#cccccc").Value; 
}

假设我在表

<thead>
<tr align="center" bgcolor="white">
  <td1 style="background:#cccccc">Start</td1> 
  <td1 style="background:#cccccc">A</td1> 
  <td1 style="background:#cccccc">B</td1> 
  <td1 style="background:#cccccc">C</td1> 
  <td1 style="background:#cccccc">D</td1> 
  <td1 style="background:#cccccc">E</td1> 
  <td1 style="background:#cccccc">F</td1> 
  <td1 style="background:#cccccc">G</td1> 
 </tr>
  </thead>

我需要得到所有的td1值

如何在XDocument中循环使用c#

您对Element的使用是不正确的-您只传递了名称,而不是元素声明的整个内容。

如果你想要所有的td1元素,你想要这样:

foreach (var descendant in xmlDoc.Descendants("thead"))
{
    foreach (var title in descendant.Element("tr")
                                    .Elements("td1")
                                    .Select(td1 => td1.Value))
    {
        ...
    }
}

如果您不需要thead元素中的任何内容:

foreach (var title in descendant.Descendants("thead")
                                .Elements("tr")
                                .Elements("td1")
                                .Select(td1 => td1.Value))
{
    ...
}

(顺便说一下,你真的是指td1而不是td吗?)

如果您需要td1元素,那么在这种情况下,您可以直接选择它们:

var titles = xdoc.Descendants("td1").Select(td => (string)td);

或者可以使用XPath

var titles = from td in xdoc.XPathSelectElements("//thread/tr/td1")
             select (string)td;

注意如果你要解析html文档,那么最好考虑使用htmllagilitypack(可从NuGet获得)