【问题标题】:Extract data from table cells and ignore specific child tags with Xpath?从表格单元格中提取数据并使用 Xpath 忽略特定的子标签?
【发布时间】:2016-03-04 07:43:33
【问题描述】:

拥有这个 html 表格:

<table class="info">
<tbody>
    <tr><td class="name">Year</td><td>2011</td></tr>
    <tr><td class="name">Area</td><td>45 m<sup>2</sup></td></tr>     
    <tr><td class="name">Condition</td><td>Renovated</td></tr>
</tbody>
</table>

我正在尝试从每行的第二个单元格中提取数据(它是:2011, 45 m, Renovated)

我使用这个 Xpath 表达式:

//table[@class="info"]//td[2]//text()

收到的输出(错误):

2011
45 m
2
Renovated

期望的输出:

2011
45 m
Renovated

如您所见,从第二行中,我收到了包含在 &lt;sup&gt; 标记中的值。我想排除这个值。 我知道我可以使用这个代替我当前的 Xpath 代码(最后删除了 1 个斜杠):

//table[@class="info"]//td[2]/text()

它会解决问题,但我需要在 &lt;td&gt; 中排除这个特定的 &lt;sup&gt; 标签。因为有时我在 &lt;td&gt; 中有一些我不想排除的标签。

所以,我想从每行的第二个单元格中获取数据并排除 &lt;sup&gt; 标签中的值

【问题讨论】:

    标签: html parsing xpath


    【解决方案1】:

    对于每个tr 获取第二个td 并获取/text()(单斜杠)以避免获取元素子文本。为我工作:

    //table[@class="info"]//tr/td[2]/text()
    

    打印:

    2011
    45 m
    Renovated
    

    或者,如果您只想排除 sup 元素:

    //table[@class="info"]//tr/td[2]//text()[not(parent::sup)]
    

    【讨论】:

    • 不幸的是我不能这样做,因为它忽略了所有子标签。但我只需要忽略 标签。有时我有不想排除的子标签。我在我的问题中写了这个。
    • 对不起,我想我错过了一些东西,但它仍然在 标签中返回值。表达有问题。
    • @AndreyRadik 很有趣,它对我有用。确保您尝试的表达方式与我提供的相同。
    • 很奇怪。在codebeautify.org/Xpath-Tester 中不起作用,但我在 freeformatter.com 上检查了它。一切正常。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-06
    • 1970-01-01
    • 2014-11-28
    • 1970-01-01
    相关资源
    最近更新 更多