Исключение тега в дереве dom при выполнении запроса xpath - PullRequest
0 голосов
/ 28 января 2012

У меня есть такая HTML-структура ..

<div id="divid"> 
<ul id="ulid">
<li style="margin-left: 8px">
        <strong>books</strong>
</li>
<li style="margin-left: 6px">
        <a hre="">
        <span id="spanid">first line</span></a>
</li> 
<li style="margin-left: 6px">
        <a hre="">
        <span id="spanid">2nd line</span></a>
</li>
</ul>
</div>

Я анализирую эту HTML-часть и использую запрос xpath

$xpath->query('//div[@id="divid"]/ul[@id="ulid"]/li/a');

и желаемый вывод

первая строка
вторая строка

Насколько я понимаю, мой запрос xpath в порядке, если в первом теге "li" отсутствует тег "strong".

Обратите внимание, что первый тег 'li' имеет сильный тег, в то время как все остальные теги li содержат тег span *
теперь я хочу ИСКЛЮЧИТЬ тег 'li' (который состоит из тега 'strong' в нем) из моего запроса xpath, чтобы я мог получить значения тега ниже тега привязки в теге li
Как я могу изменить запрос xpath, чтобы сделать это возможным? Любое руководство?

исходный код, над которым я работал, был ...

<ul data-typeid="n" id="ref_1000">

     <li style="margin-left: -18px;">
                                            <a href="/s/ref=sr_ex_n_0?rh=i%3Aaps%2Ck%3Ahow+to+grow+tomatoes&amp;sort=salesrank&amp;keywords=how+to+grow+tomatoes&amp;ie=UTF8&amp;qid=1327692925">‹ <span class="expand">Any Department</span></a>
                                            </li>
                                    <li style="margin-left: 8px;">
                                            <strong>Books</strong>
                                        </li>
                                    <li style="margin-left: 6px;">

                               <a href="/s/ref=sr_nr_n_0?rh=k%3Ahow+to+grow+tomatoes%2Cn%3A283155%2Cp_n_feature_browse-bin%3A618073011%2Cn%3A%211000%2Cn%3A48&amp;bbn=1000&amp;sort=salesrank&amp;keywords=how+to+grow+tomatoes&amp;ie=UTF8&amp;qid=1327692925&amp;rnid=1000">
                        <span class="refinementLink">Crafts, Hobbies &amp; Home</span><span class="narrowValue"> (19)</span>
                                </a>
                    </li>
            <li style="margin-left: 6px;">
                               <a href="/s/ref=sr_nr_n_1?rh=k%3Ahow+to+grow+tomatoes%2Cn%3A283155%2Cp_n_feature_browse-bin%3A618073011%2Cn%3A%211000%2Cn%3A10&amp;bbn=1000&amp;sort=salesrank&amp;keywords=how+to+grow+tomatoes&amp;ie=UTF8&amp;qid=1327692925&amp;rnid=1000">
                        <span class="refinementLink">Health, Fitness &amp; Dieting</span><span class="narrowValue"> (3)</span>

                                </a>
                    </li>
            <li style="margin-left: 6px;">
                               <a href="/s/ref=sr_nr_n_2?rh=k%3Ahow+to+grow+tomatoes%2Cn%3A283155%2Cp_n_feature_browse-bin%3A618073011%2Cn%3A%211000%2Cn%3A6&amp;bbn=1000&amp;sort=salesrank&amp;keywords=how+to+grow+tomatoes&amp;ie=UTF8&amp;qid=1327692925&amp;rnid=1000">
                        <span class="refinementLink">Cookbooks, Food &amp; Wine</span><span class="narrowValue"> (2)</span>
                                </a>
                    </li>

            </ul>

и я хочу извлечь

Ремесла, Хобби, Дом и т. Д. Закрыты в теге span

1 Ответ

4 голосов
/ 28 января 2012

Принимая предоставленное выражение по номиналу - т.е. игнорируя любые противоречия между выражением и вашим описанием его - вы можете использовать следующее выражение, чтобы исключить li элементы, которые содержат strongребенок:

//div[@id="divid"]/ul[@id="ulid"]/li[not(strong)]/a
...