libxml2 на iPhone - PullRequest
       33

libxml2 на iPhone

2 голосов
/ 06 июня 2010

Я пытаюсь проанализировать 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> и не следует за ним.

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

Ответы [ 2 ]

1 голос
/ 06 июня 2010

Вы используете парсер 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.

1 голос
/ 06 июня 2010
//p[b='Titles']/table/tr/td[0]

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

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

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

...