libxml2 на iPhone

Я пытаюсь разобрать файл HTML с помощью libxml2. Обычно это работает нормально, но не в этом случае:

<p>
    <b>Titles</b>
    (Some Text)
    <table>
        <tr>
            <td valign="top">
                …Something1...
            </td>
            <td align="right" valign="top">
                …Something2...
            </td>
        </tr>
    </table>
</p>

Я делаю этот запрос, чтобы получить первый <td>

//p[b='Titles']/table/tr/td[0]

но ничего не возвращается, потому что libxml считает, что тег <table> не является потомком тега <p> и следует за ним.

И, наконец, вопрос ПОЧЕМУ?


person mellkord    schedule 06.06.2010    source источник
comment
Хороший вопрос (+1). Смотрите мой ответ для объяснения проблемы и простого решения/решения. :)   -  person Dimitre Novatchev    schedule 06.06.2010


Ответы (2)


Вы используете парсер HTML или XML? AFAIR, HTML допускает только встроенные элементы внутри <p> (вы не можете поместить <table> в <p>), так что он автоматически закрывает тег <p> после просмотра тега <table> (в HTML вам не нужно закрывать каждый тег). Итак, ваш HTML примерно эквивалентен (атрибуты опущены):

<P>
  <B>Titles</B>
  Some text...

<TABLE>
  <TR>
    <TD>...Something1...
    <TD>...Something2...
</TABLE>

Попробуйте использовать синтаксический анализатор XML из формы libxml вместо HTML.

person el.pescado    schedule 06.06.2010

//p[b='Titles']/table/tr/td[0]

Ошибка в индексации. XPath использует индексацию на основе 1.

Исправленное выражение XPath:

//p[b='Titles']/table/tr/td[1]

person Dimitre Novatchev    schedule 06.06.2010