Xpath:如何返回空值
我有一个Xpath,如下所示:Xpath:如何返回空值,xpath,Xpath,我有一个Xpath,如下所示: "//<path to some table>/*/td[1]/text()" “///*/td[1]/text() 并返回所有非空tds的文本值,例如: <text1>, <text2>, <text3> <text1>,<>, <>, <text2>, <text3>, <> , 但问题是,包含上述值的节点之间可能有一些空tds元素
"//<path to some table>/*/td[1]/text()"
“///*/td[1]/text()
并返回所有非空tds的文本值,例如:
<text1>, <text2>, <text3>
<text1>,<>, <>, <text2>, <text3>, <>
,
但问题是,包含上述值的节点之间可能有一些空tds元素:
我想要得到的是包含一些标识符的结果,即存在那些空值,例如:
<text1>, <text2>, <text3>
<text1>,<>, <>, <text2>, <text3>, <>
,
或
,
我尝试使用下一个:
"//<path to some table>/*/string(td[1]/text())"
“///*/string(td[1]/text())”
但它返回未定义的值
当然,我可以只获取整个节点,然后在代码中使用它(删除所有不必要的信息),但可能有更好的方法吗
这种情况下的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>
文本1
{一些文本}
{一些文本}
文本2
{一些文本}
文本3
{一些文本}
{一些文本}
我们只需选择td
元素,而不是它的text()
子节点。因此,当路径更改为//*/td[1]
或//*/td
时,您将获得一组td
元素的节点集,无论它们是否为空,然后您可以访问每个节点的字符串内容(使用XPath(为每个元素节点选择string(.)
)或主机环境方法,例如W3C DOM中的textContent
,或MSXML DOM中的text
)。这样将包括空字符串
在使用XPath 2.0或XQuery的情况下,可以直接选择
//*/td/string(.)
来获得字符串值序列。但是XPath 1.0不支持在最后一步中使用函数调用的方法,在那里,您可以选择td
元素节点,然后在单独的步骤中访问每个节点的字符串值。您的意思是只需要带文本的td[1],而不需要不带文本的?如果是这样,您可以使用这个xpath
//td[1][string-length(text()) > 1]
发布您的实际XML,而不是一些没有意义的虚构文本,我们可能能够帮助您检查
$x(“//table[@class='tablesorter']/tbody/*/td[1]/string(.)”
,它在devTools和FirebugWell中返回Xpath错误。我清楚地指出//*/td/string(.)
是XPath 2.0,所以尝试在Firebug中使用它当然没有意义,而且失败了。但是如果您在Mozilla浏览器中使用XPath 1.0,那么您可以使用//table[@class='tablesorter']/tbody/*/td[1]访问所有td
元素节点
然后访问DOM中这些元素节点的textContent
属性以获取字符串内容。请参阅如何使用XPath 1.0和Mozilla查找td
元素节点,包括空节点,并输出其textContent
。然后查看是否要使用XPath 1.0完成所有操作。该示例没有读取textContent
,而是使用XPathAPI读取外部查询中选择的每个td
元素的字符串值。看起来jsfiddle.net/e6wtk/1是正确答案。我正在使用类似的方法在测试框架中创建Xpath扩展点。