如何查找没有某些子节点的节点

时间:2011-07-26 12:27:04

标签: xml xpath

我在这个网站上找不到确切的问题。 页面上的html包含许多元素,其中一些包含标题单元格“tr”,一些实际数据单元格为“td”

以下是一个例子:

<tr align="center">
    <th width="63"><b>&nbsp;</b></th>
    <th width="293"><b>Partners</b></th>
    <th width="54"><b>Score</b></th>
    <th width="184"><b>Type of Partner</b></th>
</tr>            
<tr>
 <td>&nbsp;</td>
 <td height="17">Acme trucking</td>
 <td align="center">0.75</td>
 <td>Truck Carrier</td>
</tr>

我需要找到只包含“td”元素的所有“tr”元素,换句话说,排除所有包含“th”元素的元素

我还希望有更具体的xpath表达式,它只能找到包含4个“td”子元素的“tr”元素。

如果你只能为只有“td”的trs提供2个单独的xpath表达式 还有一个“tr”,它有4“td”,我真的很感激。

2 个答案:

答案 0 :(得分:4)

  1. //tr[td and count(td) = count(*)]//tr[td and not(*[not(self::td)])]
  2. //tr[count(td) = 4 and count(td) = count(*)]
  3. 如果您只需要tr td且没有文字,例如:

    <root>
        <tr>
            Text here
            <td></td>
        </tr>
    </root>
    

    假设它无效tr,您可以使用:

    //tr[td and count(td) = count(*) and not(normalize-space(text()))]
    

    它只允许空格。

答案 1 :(得分:1)

我需要找到只包含“td”元素的所有“tr”元素,换句话说,排除所有包含“th”元素的元素

//tr[not(th)]

我还希望有更具体的xpath表达式,它只能找到包含4个“td”子元素的“tr”元素。

//tr[count(td) = 4]

这假设任何一个tr都不会同时拥有tdth个孩子。