0

次の HTML の Xpath の作成に問題があります。

<html>
<body>
<table class="tablesorter">
<tbody>     
    <tr class="tr_class">
                    <td>{some td info}</td>
                    <td>{some td info}</td>                    
                    <td>
                        <span class="span1">
                            <span class="span2">Out</span>
                            <span class="span3">SMTH</span>
                            <span class="span4">Out</span>
                        </span>
                    </td>   
    </tr>

    <tr class="tr_class">
                    <td>{some td info}</td>
                    <td>{some td info}</td>                    
                    <td>In</td> 
    </tr>

    <tr class="tr_class">
                    <td>{some td info}</td>
                    <td>{some td info}</td>                    
                    <td>In</td> 
    </tr>   

</tbody>
</table>
</body>
</html>

私が望むのは、3 番目の各 td ノードのコンテンツ (子がない場合) または class="span2" を持つスパンのコンテンツを返す Xpath を作成することです。たとえば、この html の場合、次のように返されます。

Out,In,In

必要なスパン ノードを返す Xpath があります。次のようになります。

//table[@class = 'tablesorter']//td[3]/descendant::*[@class='span2']/text()

そして、各 3d td ノードの単純なコンテンツを返す Xpath があります。

//table[@class = 'tablesorter']//td[3][count(descendant::*)=0]/text()

しかし、必要な Xpath は 1 つだけです。なぜなら、'In' または 'Out' 値の正しい順序付け (テーブルでの順序付け) が必要だからです。

4

1 に答える 1

1

これで十分ですが、「コーパス」にとってどれほど堅牢になるかはわかりません。

//table[@class="tablesorter"]/tbody/tr/td[3]/descendant::text()[normalize-space(.)!=""]

['Out', 'In', 'In']


アップデート

//table[@class="tablesorter"]/tbody/tr/td[3]/descendant::text()[normalize-space(.)!=""][parent::td or parent::span[@class="span2"]]
于 2013-04-05T12:09:28.570 に答える