如何使用c#在XDocument中循环它

时间:2013-06-11 15:48:34

标签: c# xml linq-to-xml

我的表和td值如下代码

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

假设我在表格中的thead下方

<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值

2 个答案:

答案 0 :(得分:2)

您对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吗?

答案 1 :(得分:1)

如果您需要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文档,那么最好考虑使用HtmlAgilityPack(可从NuGet获得)。