Xpath:如何返回空值

时间:2013-04-12 14:27:10

标签: xpath

我有一个如下的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>

2 个答案:

答案 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]