1

我有一个 Xpath,如下所示:

"//<path to some table>/*/td[1]/text()"

它返回所有非空 td 的文本值,例如:

<text1>, <text2>, <text3>

但问题是在节点之间,包含提到的值可能是一些空的 tds 元素:我想要的是获得包含一些标识符的结果,即存在那些空值,例如:

<text1>,<>, <>, <text2>, <text3>, <>

或者

<text1>,<null>, <null>, <text2>, <text3>, <null>

我尝试使用下一个:

"//<path to some table>/*/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>
4

2 回答 2

1

那么只需选择td元素,而不是其text()子节点。因此,随着路径更改为,//<path to some table>/*/td[1]或者//<path to some table>/*/td您将获得td元素的节点集,无论它们是否为空,然后您可以访问每个节点的字符串内容(使用 XPath(string(.)为每个元素节点选择)或主机环境方法例如textContent在 W3C DOM 或textMSXML DOM 中。)。这样空字符串将被包括在内。

如果您使用 XPath 2.0 或 XQuery,您可以直接选择//<path to some table>/*/td/string(.)具有一系列字符串值。但是 XPath 1.0 不支持在最后一步调用函数的方法,在那里您可以选择td元素节点,然后在单独的步骤中访问每个节点的字符串值。

于 2013-04-12T14:43:14.787 回答
0

你的意思是你只想要带有文本的 td[1] 并摆脱没有文本的?如果是这样,您可以使用此 xpath

//td[1][string-length(text()) > 1]
于 2013-04-16T16:05:13.640 回答