XML не анализируется в NSDictionary?

Я использую XMLReader для преобразования xmlString в NSDictionary, и он отлично работает для часть строки xml. Но он дает нулевой словарь для xml, отображаемый ниже

<?xml version=\"1.0\"?>
<THEME>
    <OBJ>
        <FORMBG>0x00E0E0E0</FORMBG>
        <ALERTBG>0x00B4B4B4</ALERTBG>
        <FORMFONT>0x0033001A</FORMFONT>
        <FORMFONT2>0x00575757</FORMFONT2>
        <FORMFONT3>0x003E3E37</FORMFONT3>
        <ROWSELECTORLIST>0x0000CC33</ROWSELECTORLIST>
        <ROWDIVIDER>0x00BBBBBB</ROWDIVIDER>
        <SUBHEADER>0x00A8A8A8</SUBHEADER>
        <SELECTORCOMPONENT>0x00C2C2C2</SELECTORCOMPONENT>
        <FOOTER>0x00796767</FOOTER>
    </OBJ>
</THEME>

мой код преобразования выглядит следующим образом:

NSString *stringURL=[NSString stringWithFormat:@"http://202.58.232.138/mt/theme.aspx"];
NSURL *url=[NSURL URLWithString:stringURL];

NSMutableURLRequest *request=[[NSMutableURLRequest alloc] initWithURL:url];
NSError *error;
NSURLResponse *response;
NSData *urlData=[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];

NSString *responseString=[[NSString alloc] initWithData:urlData encoding:NSUTF8StringEncoding];
NSLog(@"response string is %@",responseString);

NSDictionary *dictionary=[XMLReader dictionaryForXMLString:responseString error:nil];

URL-адрес печатает следующие данные в браузере

    0x00E0E0E00x00B4B4B40x0033001A0x005757570x003E3E370x0000CC330x00BBBBBB0x00A8A8A80x00C2C2C2
0x00796767

и печать в журнале xcode отобразит следующие данные.

<?xml version=\"1.0\"?>
<THEME>
    <OBJ>
        <FORMBG>0x00E0E0E0</FORMBG>
        <ALERTBG>0x00B4B4B4</ALERTBG>
        <FORMFONT>0x0033001A</FORMFONT>
        <FORMFONT2>0x00575757</FORMFONT2>
        <FORMFONT3>0x003E3E37</FORMFONT3>
        <ROWSELECTORLIST>0x0000CC33</ROWSELECTORLIST>
        <ROWDIVIDER>0x00BBBBBB</ROWDIVIDER>
        <SUBHEADER>0x00A8A8A8</SUBHEADER>
        <SELECTORCOMPONENT>0x00C2C2C2</SELECTORCOMPONENT>
        <FOOTER>0x00796767</FOOTER>
    </OBJ>
</THEME>

Я думаю, именно поэтому он не конвертируется в NSDictionary. пожалуйста, помогите, если вы уже сталкивались с такой проблемой. Когда вы передаете вышеуказанные данные xml для [XMLReader DictionaryForXMLString: ошибка responseString: nil]; в месте строки ответа, тогда он будет работать отлично. Но если вы выполните приведенный выше код, он отобразит словарь = (null).

Заранее спасибо!


person Warewolf    schedule 25.01.2013    source источник
comment
Что вы получите в параметре ошибки, если замените NSDictionary *dics=[XMLReader DictionaryForXMLData:urlData error:nil]; с NSError *error = nil; NSDictionary *dics=[XMLReader DictionaryForXMLData:ошибка urlData:&error]; NSLog(@error: %@, [описание локализованной ошибки]); Ваша ошибка должна быть там.   -  person Vlad    schedule 25.01.2013


Ответы (3)


Наконец-то нашел ошибку:

он подсчитывает escape-последовательность в строке ответа. Вот почему он не анализирует NSDictionary. Я добавил строку ниже, чтобы заменить escape-последовательность пробелом.

NSString *responseString=[[NSString alloc] initWithData:urlData encoding:NSUTF8StringEncoding];
responseString=[responseString stringByReplacingOccurrencesOfString:@"\\" withString:@""];

Теперь мой код работает отлично. вывод показан ниже после синтаксического анализа.

xml dictianary is {
THEME =     {
    OBJ =         {
        ALERTBG =             {
            text = 0x00B4B4B4;
        };
        FOOTER =             {
            text = 0x00796767;
        };
        FORMBG =             {
            text = 0x00E0E0E0;
        };
        FORMFONT =             {
            text = 0x0033001A;
        };
        FORMFONT2 =             {
            text = 0x00575757;
        };
        FORMFONT3 =             {
            text = 0x003E3E37;
        };
        ROWDIVIDER =             {
            text = 0x00BBBBBB;
        };
        ROWSELECTORLIST =             {
            text = 0x0000CC33;
        };
        SELECTORCOMPONENT =             {
            text = 0x00C2C2C2;
        };
        SUBHEADER =             {
            text = 0x00A8A8A8;
        };
    };
};
}
person Warewolf    schedule 29.01.2013

Я предполагаю, что словарь не инициализирован.

Вы должны инициализировать NSDictionary *dics.

person Saurabh Shukla    schedule 25.01.2013
comment
другие xmlString успешно конвертируются. - person Warewolf; 25.01.2013

Вы пытались поставить распределение

NSDictionary *dics=[XMLReader dictionaryForXMLData:urlData error:nil];

в обратном вызове асинхронного запроса? Он отлично работает для меня.

Я думаю, что может быть проблема с загрузкой xml в первую очередь, но вы не проверяете это.

person Anas    schedule 25.01.2013