NSXMLParser есть пустые значения? - PullRequest
0 голосов
/ 25 сентября 2010

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

<?xml version='1.0'?>
<methodResponse>
    <params>
        <param>
            <value><array><data>
                <value><array><data>
                    <value><dateTime.iso8601>20100508T14:49:56</dateTime.iso8601></value>
                    <value><string></string></value>
                    <value><string>comment</string></value>
                    <value><string></string></value>
                    <value><string>Milestone milestone1 deleted</string></value>
                    <value><int>1</int></value>
                </data></array></value>
            </data></array></value>
        </param>
    </params>
</methodRepsonse>

NSXMLParser, похоже, не возвращает никаких данных для пустых значений, в результате чего получается массив с 4 элементами вместо 6.

Могу ли я что-нибудь сделать с NSXMLParser, чтобы он возвращал пустую строку для пустых значений, чтобы я мог поддерживать порядок данных при их возврате?

Ответы [ 2 ]

1 голос
/ 25 сентября 2010

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

Я подозреваю, однако, что вы полагаетесь на неверное ожидание того, что между вызовами didStartElement... и didEndElement... вы должны получить вызов foundCharacters... с пустой строкой? Мой вопрос основан на том, как вы сформулировали заголовок своего вопроса, потому что не существует такого понятия, как «пустое значение». Либо есть значение, либо его нет.

Представьте, что вместо вашего XML содержится вместо точно эквивалентного . Вы по-прежнему получаете уведомления о начале / завершении.

Вы должны создать свой NSMutableString (предположительно, тип, который вы используете для элементов) в didStartElement..., когда найден , добавление к этой строке, если вызывается IF foundCharacters... (it может вызываться более одного раза со значением в чанках) и помещать его в массив, когда это будет сделано на didEndElement....

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

0 голосов
/ 25 сентября 2010

Не совсем уверен, что я понимаю вашу проблему здесь.NSXMLParser по крайней мере сообщит о начале и конце элементов.Разве этого не достаточно, чтобы получить их в правильном порядке?

...