gpt4 book ai didi

c# - 如何使XPath仅在每个表中搜索?

转载 作者:行者123 更新时间:2023-12-03 09:20:38 24 4
gpt4 key购买 nike

我有一些看起来像这样的HTML:

<table class="resultsTable">
<tbody>
<tr class="even">
<td width="35%"><strong>Name</strong></td>
<td>ACME ANVILS, INC</td>
</tr>
</tbody>
</table>


和一些如下的C#代码:

var name = document.DocumentNode
.SelectSingleNode("//*[text()='Name']/following::td").InnerText


愉快地返回

ACME ANVILS, INC.


但是,出现了新的皱纹。现在,相关页面会返回多个结果:

<table class="resultsTable">
<tbody>
<tr class="even">
<td width="35%"><strong>Name</strong></td>
<td>ACME ANVILS, INC.</td>
</tr>
</tbody>
</table>
<table class="resultsTable">
<tbody>
<tr class="even">
<td width="35%"><strong>Name</strong></td>
<td>ROAD RUNNER RACES, LLC</td>
</tr>
</tbody>
</table>


所以现在我正在与

var tables = document.DocumentNode.SelectNodes("//table/tbody");
foreach (var table in tables)
{
var name = table.SelectSingleNode("//*[text()='Name']/following::td").InnerText;
...
}


哪个失败了,因为 SelectSingleNode返回null。

如何使我的XPath实际返回结果,仅在我选择的特定表中搜索?

最佳答案

添加第二个表后,需要进行两项调整:


更改您的绝对XPath,

//*[text()='Name']/following::td


相对于当前 tabletbody元素的一个:

.//*[text()='Name']/following::td

现在说明,在
td轴。

要么抢第一,

(.//*[text()='Name']/following::td)[1]


或者,最好将 following::轴组合使用
对字符串值 following-sibling::进行测试,而不对文本节点进行测试,该文本节点可能埋在中间的格式化元素下面:

 .//td[.='Name']/following-sibling::td


另请参见 Difference between Testing text() nodes vs string values in XPath

关于c# - 如何使XPath仅在每个表中搜索?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39882263/

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