我有一个如下的Xpath:
"//<path to some table>/*/td[1]/text()"
并返回所有非空tds的文本值,例如:
<text1>, <text2>, <text3>
但问题是节点之间包含提到的值可能是一些空的tds元素: 我想要的是获得包含一些标识符的结果,即存在那些空值,例如:
<text1>,<>, <>, <text2>, <text3>, <>
或
<text1>,<null>, <null>, <text2>, <text3>, <null>
我尝试使用下一个:
"//<path to some table>/*/string(td[1]/text())"
但它返回 undefined
当然,我可以获得整个节点,然后在我的代码中使用它(剪切所有不必要的信息),但可能有更好的方法吗?
该案例的html示例:
<html>
<body>
<table class="tablesorter">
<tbody>
<tr class="tr_class">
<td>text1</td>
<td>{some text}</td>
</tr>
<tr class="tr_class">
<td></td>
<td>{some text}</td>
</tr>
<tr class="tr_class">
<td>text2</td>
<td>{some text}</td>
</tr>
<tr class="tr_class">
<td>text3</td>
<td>{some text}</td>
</tr>
<tr class="tr_class">
<td></td>
<td>{some text}</td>
</tr>
</tbody>
</table>
</body>
</html>
答案 0 :(得分:1)
只需选择td
元素,而不是其text()
子节点。因此,当路径更改为//<path to some table>/*/td[1]
或//<path to some table>/*/td
时,您将获得td
元素的节点集,无论它们是否为空,然后您可以访问每个元素的字符串内容node(使用XPath(为每个元素节点选择string(.)
)或主机环境方法,例如W3C DOM中的textContent
或MSXML DOM中的text
。这样就会包含空字符串。
如果您使用XPath 2.0或XQuery,您可以直接选择//<path to some table>/*/td/string(.)
以获得一系列字符串值。但是在XPath 1.0中不支持在最后一步中使用函数调用的方法,在那里您可以选择td
元素节点,然后在单独的步骤中访问每个节点的字符串值。
答案 1 :(得分:0)
你的意思是你只想要带文本的td [1]并删除没有文字的那些?如果是这样,您可以使用此xpath
//td[1][string-length(text()) > 1]