C# 将两个列表合并到某个条件

C# 将两个列表合并到某个条件,c#,selenium,foreach,C#,Selenium,Foreach,我从表中获取数据,但值显示不容易操作 我的HTML结构如下: <table> <tbody> <tr> <td> <span>1</span> <span>0</span> <br> <span> <span>Good Luck</

我从表中获取数据,但值显示不容易操作

我的HTML结构如下:

<table>
  <tbody>
    <tr>
       <td>
          <span>1</span>
          <span>0</span>
          <br>
          <span>
            <span>Good Luck</span>
            <img src="/App_Themes/Resources/img/icon_tick.gif" width="3" height="7">
          </span>
       </td>
    </tr>

    <tr>
      <td>
        <b>Nowaday<br></b>
        <p>hook<br>zp</p>
      </td>
    </tr>
  </tbody>
</table>
它将创建许多行(在我找到的大约6000个
标记中),我不知道如何安排正确的列

因为每个列中的数据都可以为null,或者其中有许多值

当前,我有
lstdelement
包含两列(实数:10列)

lstSpecialLele
包含所有必要的数据。 我只得到了:
[//td/span |//td/b |//td/p]

如何将
lstspeciallele
集成到
lstdelement
,并使用权限列。是否将
foreach
与条件一起使用

编辑:

典型情况下,我将从
lstdelement
收到的信息是:
10Good luckknowadayhookzp

lstspeciallele
将创建许多行,其中包含我需要的所有值

问题是:我不知道如何将
lstspeciallele
中的所有行排列到一个表中

我的表格有两个
标签;这意味着它有两列。如何组织
lstspeciallele
中的所有值请更正到此列

应该是这样的:

Num时间
现在祝你好运,hookzp

如前所述,数据是动态的,第一个
或第二个
不能有像
这样的标签,或者没有标签
,等等(它只是不出现,没有添加新的

实际上,您是在根目录中查找元素,这意味着在xpath中使用
/
,它将在整个页面中搜索元素,而您只需要在特定行元素中搜索,因此您应该尝试在xpath中使用
/
,它将只搜索特定元素上下文中的元素。因此,我认为您应该尝试以下方法,这将只提供所需元素列表,而不是大量元素列表,如下所示:

ReadOnlyCollection<IWebElement> lstTable = browser.FindElements(By.XPath("//table/tbody/tr"));
foreach (IWebElement val in lstTable)
{
  ReadOnlyCollection<IWebElement> lstSpecialEle = val.FindElements(By.XPath(".//td/span | .//td/b | .//td/p"));
}
Edited2:-如果要将所有列文本列表合并到单个字符串列表中,请尝试以下操作:-

var FinalList = lstSpecialEle.Where(x=>x.Text != null).ToList();
List<string> FinalList = new List <string>();
foreach (IWebElement val in lstTable)
{
    ReadOnlyCollection<IWebElement> lstSpecialEle = val.FindElements(By.XPath(".//td/span | .//td/b | .//td/p"));

    var AllTextList = lstSpecialEle.Where(x=>x.Text != null).ToList().Select(El => El.Text).ToList();

     string AllText = String.Join(" ", AllTextList);

     FinalList.Add(AllText);       
}
Console.WriteLine(FinalList);
List FinalList=newlist();
foreach(表中的IWebElement val)
{
ReadOnlyCollection lstSpecialElement=val.FindElements(By.XPath(“.//td/span |.//td/b |.//td/p”);
var AllTextList=lstSpecialEle.Where(x=>x.Text!=null).ToList().Select(El=>El.Text).ToList();
string AllText=string.Join(“,AllTextList);
添加(所有文本);
}
Console.WriteLine(FinalList);
现在,
FinalList
将包含以每行分隔的所有值


希望它能帮助…:)

是的,我在XPath元素之前添加了
,它将6000行限制为16->30行。而且数据是动态的,所以我无法知道
//td/span
//td/b
的确切数量。因为可以在X列中,所以没有任何数据。有没有在空行插入特殊字符的想法。为此,我们需要知道列包含行。@VănLộ你的意思是你已经得到了一个包含null和你想要的精确元素的列表。对吧???@VănLộ如果我是对的,你可以简单地用空条件过滤它并得到子列表。请参阅更新的答案。希望它能起作用……:)你能看到我更新的问题吗。我不知道元素什么时候是可见的。我知道,但是当过滤它时,如何在列中正确添加?我需要知道确切的每一列,每一列中的每一行都是空的。与其他列表进行比较。
List<string> FinalList = new List <string>();
foreach (IWebElement val in lstTable)
{
    ReadOnlyCollection<IWebElement> lstSpecialEle = val.FindElements(By.XPath(".//td/span | .//td/b | .//td/p"));

    var AllTextList = lstSpecialEle.Where(x=>x.Text != null).ToList().Select(El => El.Text).ToList();

     string AllText = String.Join(" ", AllTextList);

     FinalList.Add(AllText);       
}
Console.WriteLine(FinalList);