Как анализировать / игнорировать искаженные части XML? - PullRequest
2 голосов
/ 05 марта 2009

Я пишу приложение Air, которое использует бета-версию API веб-сервиса. Иногда этот 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>

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

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

Ответы [ 4 ]

1 голос
/ 06 марта 2009

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

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

Приветствия

1 голос
/ 05 марта 2009
  1. Написать поставщику веб-услуг. Расскажите им о неправильно сформированном XML. Они могут просто исправить это.
  2. При возвращении неверно сформированного XML-декодера XML по умолчанию Flex теряет работу
  3. Если вы хотите попробовать обработать, сверните свой собственный декодер. См. xmlDecode член HTTPService.
1 голос
/ 05 марта 2009

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

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

1 голос
/ 05 марта 2009

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

...