исключая нуль, тег из списка в XPath - PullRequest
0 голосов
/ 06 июня 2019

Я хочу получить информацию, используя XPath.

<table class="table">
    <tr>
        <td style="border: 1px solid blue; background-color:red;">
            <p>Detail</p>
        </td>
    </tr>
    <tr>
        <th>Title 1</th>
        <td style="border: 1px solid blue;">AAA</td>
        <td style="border: 1px solid blue;">LIST.AAA</td>
    </tr>
    <tr>
        <th>Title 2</th>
        <td style="border: 1px solid blue;">BBB</td>
        <td style="border: 1px solid blue;">LIST.BBB</td>
    </tr>
    <tr>
        <th>Title 3</th>
        <td style="border: 1px solid blue;">CCC</td>
        <td style="border: 1px solid blue;">apple</td>
    </tr>
    <tr>
        <th>Title 4</th>
        <td style="border: 1px solid blue;">DDD</td>
        <td style="border: 1px solid blue;"></td>
    </tr>
    <tr>
        <th>etc</th>
        <td style="width:40%;">test</td>
	    <td style="border: 1px solid blue;"></td>
    </tr>
</table>
 
  1. th содержит строку 'Title' / ('tr' с записями с 'title' в 'th')
  2. td[2] должен иметь "."(точка)
  3. Исключить, если td[2] содержит строку 'apple'
  4. Исключить, если td[2] имеет пробел

Я пытаюсь:

node = table_html.xpath('//*[@class="table"]/tr[(contains(child::th, \'Title\'))]')]

    td1 = node.xpath('child::td[@style="border: 1px solid blue;"][1]/text()')

    td2 = node.xpath('child::td[@style="border: 1px solid blue;"][2]/text()[not(contains(text(), \'\'))]')
    td2 = node.xpath('child::td[@style="border: 1px solid blue;"][2]/text()[. != \'\']')
    td2 = node.xpath('child::td[@style="border: 1px solid blue;"][2]/text()[(. != \'\')]')

    etc...

вывод, который я хочу:

td[1] /  td[2]
 AAA  / LIST_AAA
 BBB  / LIST_BBB

, но фактический вывод:

td[1] /  td[2]
 AAA  / LIST_AAA
 BBB  / LIST_BBB
 CCC  / trash
 DDD  / 

1 Ответ

0 голосов
/ 06 июня 2019

Вот xpath, который вы можете использовать.

xpath для td [1]:

//table[@class='table']//tr[th[contains(.,'Title')]][td[2][contains(.,'.')][not(contains(.,'apple'))][string-length(.)>0]]/td[1]

xpath для td 2 :

//table[@class='table']//tr[th[contains(.,'Title')]][td[2][contains(.,'.')][not(contains(.,'apple'))][string-length(.)>0]]/td[2]

Скриншот Chrome Dev Tools: enter image description here

Один xpath с 2 выходами:

 //table[@class='table']//tr[th[contains(.,'Title')]][td[2][contains(.,'.')][not(contains(.,'apple'))][string-length(.)>0]]/concat(./td[1]/text(),"/",./td[2]/text())

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...