Извлечение текста (в указанном порядке) с использованием xPath? - PullRequest
0 голосов
/ 22 июня 2011

Hiall,

Я борюсь с этим уже пару дней.Я в значительной степени перепробовал все, что мог придумать и все в сети.Я пытаюсь извлечь текст из таблицы (из каждой), как показано в браузере, независимо от дополнительных «и» (я уверен, что есть и другие случаи).Я думаю, что это в значительной степени показывает проблему (я держал это как можно короче).

<html>
<head></head>
<body>
  <table class='infobox vcard' style="font-size: 95%" id="sortable_table_id_0">
    <tbody>
      <tr>
        <td><a href="/wiki/Germania_(airline)" title="Germania (airline)">Germania</a></td>
        <td><b>Seasonal</b>: Munich, Nuremberg [begins 31 July]
          <sup id="cite_ref-4" class="reference"><a href="#cite_note-4"><span>[</span>5<span>]</span></a></sup>
        </td>
      </tr>
    </tbody>
  </table>
</body>
</html>

Лучшее, что я придумал, это:

xpath("//table[@class='infobox vcard']/descendant::*[not(@class='reference') and text()]")

Однако, когда я перебираю массив, порядок текста неправильный.Например, последний элемент () будет иметь вид:

Мюнхен, Нюрнберг [начинается 31 июля] Сезонное 5 []

Есть идеи?

Большое спасибо, Стив

Ответы [ 2 ]

0 голосов
/ 23 июня 2011

Используя xpath("//table[@class='infobox vcard']//text()[not(@class='reference')]"), получите следующий массив:

['\n    ',
 '\n      ',
 '\n        ',
 'Germania',
 '\n        ',
 'Seasonal',
 ': Munich, Nuremberg [begins 31 July]\n          ',
 '[',
 '5',
 ']',
 '\n        ',
 '\n      ',
 '\n    ',
 '\n  ']

Это похоже на сохранение порядка.

0 голосов
/ 22 июня 2011

Я довольно удивлен этими результатами. Технически XPath 1.0 возвращает набор узлов, а набор не имеет определенного порядка, поэтому нет гарантии порядка результатов. (XSLT всегда обрабатывает результаты XPath в порядке документа, но это не означает, что XPath должен доставлять их в порядке документа.) На практике (и это становится окончательным в XPath 2.0), существует большая вероятность того, что результаты будут возвращены в документе порядок, который не то, что вы получаете. Попробуйте другой процессор XPath, предпочтительно тот, который заявляет о соответствии XPath 2.0, который является строгим в этом отношении.

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