Игнорировать CDATA при разборе xml - PullRequest
0 голосов
/ 25 января 2010

Я новичок в разработке для iphone. Я хочу игнорировать тег CDATA при разборе, потому что он рассматривает тег HTML, следующий за ним как текст. Поскольку я хочу отображать только содержимое, я хочу, чтобы мой анализатор игнорировал тег CDATA. есть

[CDATA[<br /><p class="author"><span class="by">By: </span>By Sydney Ember</p><br><p>In the week since an </p>]].

Есть ли способ игнорировать тег CDATA? Есть ли способ проанализировать мой источник дважды, чтобы он отображал только содержимое?

Пожалуйста, дайте мне пример кода. Пожалуйста, помогите мне. Спасибо.

Ответы [ 2 ]

3 голосов
/ 25 января 2010

Если вы рассматриваете содержимое CDATA как XML, а не как CDATA, тогда ваш парсер выдаст ошибку (поскольку ваш HTML представляет собой странное сочетание XHTML и HTML и не очень хорошо сформирован).

Если вы хотите получить HTML, затем проанализируйте XML, извлеките текстовое содержимое узла, а затем проанализируйте этот текст как HTML.

1 голос
/ 25 января 2010

Невозможно игнорировать тег CDATA - это часть спецификации xml, и парсеры должны его соблюдать.

Если вам не нравится идея этого ответа на ваш предыдущий вопрос , вы можете получить содержимое раздела CDATA и снова проанализировать его как XML. Тем не менее, это настоятельно не рекомендуется! Вы не знаете, что содержимое CDATA будет действительным xml (скорее всего, нет).

Если вы можете на 100% гарантировать, что раздел CDATA содержит форму, указанную выше, вы, вероятно, могли бы использовать некоторые манипуляции со строками для вывода данных (например, string replace '<span class="by">By: </span>' with ''), но, опять же, это почти наверняка сломается, если содержимое CDATA изменить.

Откуда приходит xml? Лучше поговорить с владельцем сервиса и попросить его прислать вам вместо описания что-то вроде

<description>
  <author>By Sydney Ember</autho>
  <text>In the week since an </text>
</description>

S

...