XPath выбирает потомков родителей с родителями в пределах - PullRequest
0 голосов
/ 03 октября 2011

Мой xpath: (// tr [td [содержит (., «Уточнение по типам транспортных средств»)]]) [1] / follow-sibling :: tr / td / div / table / tr / td / font / ul / li / a

Мой источник:

<tr><td><font color="White">Refine by Vehicle Types</font></td> </tr>
<tr><td><div>
  <table> <tr> <td><font<ul><li><a> Automobile/Light Trucks</a></li></ul></font></td> </tr> </table>
</div></td> </tr>
<tr> <td></td> </tr>
<tr> <td><font>Refine by Category</font></td> </tr>
<tr> <td><div>
  <table> <tr> <td><font><ul><li><a>Agricultural</a></li></ul></font></td></tr>

Я пытаюсь очистить этот источник и собрать узлы <li> после «Уточнить по типам транспортных средств», но не после «Уточнить по категориям».

Любая помощь ценится.

Ответы [ 2 ]

1 голос
/ 03 октября 2011

Для надежного XPath, который будет работать независимо от того, сколько элементов tr / li находятся между двумя текстовыми метками, попробуйте:

(//tr
  [td[contains(., 'Refine by Vehicle Types')]]
)[1]
  /following-sibling::tr[not(preceding-sibling::tr
                              [contains(., 'Refine by Category')])]
    /td/div/table
             /tr/td/font
                     /ul/li/a

(Заимствование из форматирования @ Dimitre.)

Вышеприведенное неэффективно (может быть O (n ^ 2)), поэтому, если у вас длинная страница, она может стать медленной.Но для умеренных страниц это должно быть хорошо.

1 голос
/ 03 октября 2011

Вы почти у цели.

Изменить :

   (//tr
      [td[contains(., 'Refine by Vehicle Types')]]
    )
     [1]
      /following-sibling::tr
        /td/div/table
                 /tr/td/font
                         /ul/li/a

на :

   (//tr
      [td[contains(., 'Refine by Vehicle Types')]]
    )
     [1]
      /following-sibling::tr[1]
        /td/div/table
                 /tr/td/font
                         /ul/li/a

Когда второе выражение XPath сравнивается со следующим XML-документом (ваш сильно искаженный текст исправлен, чтобы стать правильно сформированным XML-документом):

<table>
<tr>
  <td>
     <font color="White">Refine by Vehicle Types</font>
  </td>
</tr>
  <tr>
    <td>
      <div>
        <table>
           <tr>
             <td>
               <font>
                  <ul>
                     <li>
                        <a> Automobile/Light Trucks</a>
                     </li>
                  </ul>
               </font>
             </td>
           </tr>
        </table>
      </div>
    </td>
  </tr>
  <tr>
    <td></td>
  </tr>
  <tr>
    <td>
      <font>Refine by Category</font>
    </td>
  </tr>
  <tr>
    <td>
      <div>
        <table>
          <tr>
            <td>
              <font>
                <ul>
                  <li><a>Agricultural</a></li>
                </ul>
              </font>
            </td>
          </tr>
        </table>
      </div>
    </td>
  </tr>
</table>

Только одно - искомый- a элемент выбран :

<a> Automobile/Light Trucks</a>

Примечание : я упоминал, что XPath Visualizer поможеттебя много?

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