iPhone Development - XMLParser по сравнению с libxml2 по сравнению с TouchXML

Я знаю, что эта тема старая, но я дам еще один подход, который я нашел и ранее описал здесь здесь . В основном я использую ASP.MVC с WIF (но это не очень важно для контекста этой темы - ответ адекватен независимо от того, какие рамки используются. Указание остается неизменным - решение проблем, связанных с ошибками аутентификации, в то время как выполнение запросов ajax) .

Подход, показанный ниже, может быть применен ко всем запросам ajax из коробки (если они явно не переопределяют событие beforeSend).

$.ajaxSetup({
    beforeSend: checkPulse,
    error: function (XMLHttpRequest, textStatus, errorThrown) {
        document.open();
        document.write(XMLHttpRequest.responseText);
        document.close();
    }
});

Перед выполнением любого запроса ajax CheckPulse (метод контроллера, который может быть чем-то простейшим):

[Authorize]
public virtual void CheckPulse() {}

Если пользователь не аутентифицирован (токен истек), такой метод не может быть доступен (защищен атрибутом Authorize). Поскольку структура обрабатывает аутентификацию, а токен истекает, он передает HTTP-статус 302 в ответ. Если вы не хотите, чтобы ваш браузер обрабатывал 302 ответ прозрачно, поймайте его в Global.asax и измените статус ответа - например, до 200 OK. Кроме того, добавьте заголовок, в котором вам будет предложено обработать такой ответ особым образом (позже на стороне клиента):

protected void Application_EndRequest()
{
    if (Context.Response.StatusCode == 302
        && (new HttpContextWrapper(Context)).Request.IsAjaxRequest())
    {                
        Context.Response.StatusCode = 200;
        Context.Response.AddHeader("REQUIRES_AUTH", "1");
    }
}

Наконец, на стороне клиента проверьте такой пользовательский заголовок. Если присутствует - необходимо выполнить полное перенаправление на страницу входа в систему (в моем случае window.location заменяется URL-адресом из запроса, который автоматически обрабатывается моей каркасом).

function checkPulse(XMLHttpRequest) {
    var location = window.location.href;
    $.ajax({
        url: "/Controller/CheckPulse",
        type: 'GET',
        async: false,
        beforeSend: null,
        success:
            function (result, textStatus, xhr) {
                if (xhr.getResponseHeader('REQUIRES_AUTH') === '1') {
                    XMLHttpRequest.abort(); // terminate further ajax execution
                    window.location = location;
                }
            }
    });
}

32
задан Mustafa 2 January 2009 в 13:44
поделиться

2 ответа

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

В отличие от SAX модель DOM, где все дерево XML анализируется в память (обычно с единственным вызовом), и затем можно свободно исследовать XML-документ от представленного API. Это обычно намного легче работать с, поскольку Вы получаете произвольный доступ ко всему xml документу.

, Таким образом, первым вопросом, на который нужно ответить, является SAX по сравнению с вопросом DOM. Если Вы - woring с большими XML-файлами (скажите, что 10 МБ или больше), можно хотеть придерживаться SAX. Если Вы работаете с небольшими XML-файлами или крошечными фрагментами XML, часто намного легче использовать DOM.

, Если действительно Вы решаете пойти с DOM, у Вас есть несколько опций.

libxml2 является очень мощный API, записанный в C. Это главным образом для использования стиля DOM, но имеет другие опции, если Вы становитесь опытными с ним. Но, поскольку это записано в C, это не часто привлекательно для более знакомых с Objective C (объекты и автовыпуск), или тех, которые прибывают законченный из мира .NET. Таким образом существует потребность/требование в собственной обертке Objective C вокруг libxml для создания этого более знакомым. TouchXML является одной такой оберткой. Это работает хорошо, если Вам только нужен доступ для чтения к XML. Если бы Вы хотите изменить XML или создать фрагменты/документы XML с нуля, я рекомендовал бы идти с KissXML.

58
ответ дан 27 November 2019 в 20:17
поделиться

См. Учебник по XML для iOS: Как выбрать лучший парсер XML для вашего проекта iPhone:

Существует множество вариантов, когда дело доходит до парсинга XML на iPhone. iPhone SDK поставляется с двумя различными библиотеками на выбор, также есть несколько популярных библиотек сторонних разработчиков, таких как TBXML, TouchXML, KissXML, TinyXML и GDataXML. Как разработчику выбрать лучший парсер XML для своего проекта?

Недавно я рассматривал различные варианты, и в итоге расширил образец XMLPerformance от Apple, чтобы опробовать каждую из вышеперечисленных библиотек, чтобы узнать, как они работают, и сравнить их производительность. Я решил поделиться тем, что мне удалось узнать, с теми, кто, возможно, ищет лучшую библиотеку XML для своего проекта iPhone.

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

14
ответ дан 27 November 2019 в 20:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: