Конвертировать ссылки в кавычках в простой текст - PullRequest
0 голосов
/ 29 июня 2011

Итак, в последнее время я задавал много вопросов по Xpath.Извините, но я только начал его использовать и работаю над каким-то сложным проектом.Видите ли, в данный момент я анализирую HTML следующим образом (не для копирования и вставки, просто для примера):

<span id="no153434"></span>
<blockquote>Text here.<br/>More text.<br/>Some more text.</blockquote>

И я использую

//span[starts-with(@id, 'no')]/following::*[1][name()='blockquote']//node()

Чтобы получитьтекст внутри.Работает нормально, хотя очень расстраивает.Мне нужно вручную проверитьзатем вручную объедините строки до и после br, добавьте новую строку и так далее.Но это все еще работает.Пока в тексте нет ссылки, то есть.Тогда код выглядит так:

<span id="no153434"></span>
<blockquote>Text here.<br/>Text.<br/><font class = "unkfunc"><a href="linkhere" class="link">linkhere</a></font></blockquote>

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

Ответы [ 3 ]

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

Если вы хотите только текстовые узлы и br:

 //span
  [starts-with(@id, 'no')]/
  following::*[1][name()='blockquote']
   //node()
   [ count(.|..//text()) = count(..//text())
     or 
     name()='br'
   ]

возвращает

Text here.
<br />
Text.
<br />
linkhere
0 голосов
/ 01 июля 2011

Ответ - не использовать XPath для такой работы.С Objective-C-HTML-Parser стало работать в 1 000 000 раз проще.

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

Вы можете использовать этот XPath для получения текста внутри элемента: //span[starts-with(@id, 'no')]/following::*[1][name()='blockquote']//text()

Таким образом, вы получите следующий результат:

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