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