Как разобрать / проигнорировать искаженные части XML?

StackOverflow https://stackoverflow.com/questions/616313

Вопрос

Я пишу приложение Air, которое использует бета-версию webservice API.Иногда это приложение возвращает мне неверно сформированный XML-узел, и actionscript выдает ошибку, когда я пытаюсь создать из него XML-объект.

То, что я делал, это просто пытался / перехватывал результат и игнорировал весь ответ, если XML плохой, но я мог бы просто игнорировать искаженный узел.

Например:

<result>
  <Song>
    <location>http://www.anyurl.com/audio/loftparty092108_pt4.mp3</location>
    <title>Phonte party @ The Loft, 9/21/08 (pt. 4)</title>
    <artist>Statik, Jahsonic &amp; Stylus        <artist>Statik, Jahsonic &amp; Stylusre />
  </Song>
</result>

Видишь эту бирку?Если бы я хотел что-то подобное, я бы хотел пропустить всю Песню целиком и взять следующую.

Есть ли какой-нибудь способ, которым я мог бы это сделать?

Это было полезно?

Решение

<Ол>
  • Написать поставщику веб-услуг. Расскажите им о неправильно сформированном XML. Они могут просто исправить это.
  • Когда неправильно сформированный XML передается обратно, XML-декодер Flex по умолчанию теряется и выбрасывает.
  • Если вы хотите попробовать обработать, сверните свой собственный декодер. См. xmlDecode участник HTTPService .
  • Другие советы

    Beautiful Soup делает это, но написано на Python. Конечно, вы всегда можете покопаться в источнике и посмотреть, как они его реализовали.

    Если число классов ошибок невелико, предварительно обработайте XML-файл, чтобы устранить ошибку, а затем передайте его в свой анализатор. Это позволит вам легко устранить обходной путь, когда проблема будет устранена. В приведенном выше случае вы должны загрузить файл в виде текста, найти узлы с дублирующимися тегами и просто удалить весь узел из текста XML.

    Или просто уведомите поставщика веб-службы и подождите - если он возвращает искаженный XML, почти каждый парсер захлебнется им, и у него должен быть стимул исправить это в ближайшее время.

    Нет, вы не можете игнорировать часть искаженного XML-документа с помощью обычного анализатора XML.Это все равно что просить компилятор Flex игнорировать синтаксические ошибки и выяснить, что на самом деле хотел сделать программист.Вам придется написать свой собственный синтаксический анализатор, который попытается определить, что такое порок развития и что он может игнорировать.

    Честно говоря, любой веб-сервис, даже бета-версия, который отправляет неверный XML, ненадежен.Это подразумевает, что они составляют XML "вручную" вместо использования программного класса.Любой, кто делает это, скорее всего, совершит множество других ошибок, особенно регрессий.Ваше время слишком ценно, чтобы зависеть от них.

    Ваше здоровье

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top