1

次のような 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())"

しかし、未定義を返します

もちろん、ノード全体を取得してコードで操作することもできますが (不要な情報をすべてカット)、もっと良い方法があるのでしょうか?

その場合の 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のノードセットが取得され、各ノードの文字列コンテンツにアクセスできます (XPath (要素ノードごとに選択) またはホスト環境メソッドを使用)。たとえば、W3C DOM やMSXML DOM など)。そうすれば、空の文字列が含まれます。tdstring(.)textContenttext

//<path to some table>/*/td/string(.)XPath 2.0 または XQuery を使用する場合は、文字列値のシーケンスを直接選択できます。しかし、最後のステップで関数呼び出しを使用するこのアプローチは、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 に答える