带有 text() 的 XPath 获取特定的文本节点

XPath with text() to get specific text node

<td style="width: 40.42%;" id="ember193" class="lt-cell align-left ember-view">
    <div class="inline-block ember-tooltip-target">
      <i class="fa fa-fw fa-lg valid"></i>
        <div id="ember195" class="ember-tooltip-base ember-view">  
      <div><!----></div>
      </div>
    </div>
    <a href="#" data-ember-action="" data-ember-action-196="196">UNIVERSITY OF VERMONT AND STATE AGRICULTURAL COLLEGE</a>
    (03-0179440)<!----><br>
    <div class="fa fa-fw fa-lg"></div>
    (UNIVERSITY OF VERMONT)
</td>

在浏览器控制台中,我执行这个:

$x("//tbody/tr[2]/td[2]/text()[7]")

我得到了我正在寻找的实际文本节点(在 td2 中的其他文本节点中)- 有没有办法在 Text<_> 属性 属性中指定它只得到这个文本节点?

目前没有通过索引获取子文本节点值的属性,只有first或last。无论如何,我会尽量不依赖子节点索引,因为它可能会有所不同。我会尝试从给定的文本中提取数字部分。

您可以借助 2 个属性来完成此操作:

[FindByXPath("td")] // TODO: Change it to your <td> locator.
[GetsContentFromSource(ContentSource.ChildTextNodesTrimmed)]
private Text<_> OrganizationNameInfo { get; set; }

public DataProvider<string, _> OrganizationNumber => GetOrCreateDataProvider(
    "Organization Number",
    () =>
    {
        string organizationNameInfo = OrganizationNameInfo.Value;
        return organizationNameInfo.Substring(1, organizationNameInfo.IndexOf(')') - 1);
    });

OrganizationNameInfo 属性 因为 ContentSource.ChildTextNodesTrimmed returns "(03-0179440)(UNIVERSITY OF VERMONT)" 值。因此,在 OrganizationNumber 属性 中,您可以轻松地将所需的部分提取为子字符串。

另一种选择是使用正则表达式来提取数字部分。