gpt4 book ai didi

c# - 合并两个有条件的列表

转载 作者:太空宇宙 更新时间:2023-11-03 12:41:56 26 4
gpt4 key购买 nike

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

我的 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>

但是当我试图获取数据时会是这样的:

10Good LuckNowadayhookzp

我正在使用这段代码:

ReadOnlyCollection<IWebElement> lstTable = browser.FindElements(By.XPath("table/tbody/tr"));
foreach (IWebElement val in lstTable)
{
ReadOnlyCollection<IWebElement> lstTDElement = val.FindElements(By.XPath("td"));
ReadOnlyCollection<IWebElement> lstSpecialEle =
val.FindElements(By.XPath("//td/span | //td/b | //td/p"));
}

它会创建很多行(在 <tr> 标签中,我发现大约有 6000 行),而且我不知道如何排列正确的列。

因为每一列,数据可以是空的,也可以有很多值。

当前,我有lstTDElement包含两列(实际:10 列)。

lstSpecialEle包含所有必要的数据。我是过滤器只能得到:[//td/span | //td/b | //td/p] .

如何整合lstSpecialElelstTDElement与权利列。使用 foreach有条件吗?

已编辑:

典型情况下,我将从 lstTDElement 收到是:10Good LuckNowadayhookzp .

lstSpecialEle将创建许多包含我需要的所有值的行。

问题是:我不知道如何排列 lstSpecialEle 中的所有行放入表格中。

我的 table 有两个 <tr>标签;这意味着它有两列。如何组织 lstSpecialEle 中的所有值更正此列。

应该是这样的:

     Num                       Time
1 0 Good Luck Nowaday hookzp

如前所述,数据是动态的,首先是<tr>或第二 <tr>不能有像 <span> 这样的标签, 或者没有标签 <b> , 等(它只是没有出现,没有添加新的 <tag>)

最佳答案

实际上,您从根中查找元素意味着在您的 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"));
}

Edited1 :如果您获取的元素列表包含空文本组合,您可以使用空条件对其进行过滤并获取包含以下确切文本的子列表:-

var FinalList = lstSpecialEle.Where(x=>x.Text != null).ToList();

Edited2 :- 如果您想将所有列文本列表合并到单个字符串列表中,请尝试如下操作:-

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);

现在 FinalList 将包含每行分隔的所有值。

希望对您有所帮助...:)

关于c# - 合并两个有条件的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38666009/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com