Почему NSXMLParser выбирает вверх по этому пробелу в методе foundCharacters?

Я учусь использовать API-интерфейс NSXMLParser для платформы iOS, и до сих пор его очень просто использовать. У меня небольшая проблема, однако, в методе foundCharacters. Насколько я понимаю, он не должен собирать пробелы, так как метод foundIgnorableWhitespace должен это перехватывать, но похоже, что так оно и есть. Вот мой код ...

   - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict 
{
    //We're at the start of a new data feed
    if([elementName isEqualToString:@"data"])
    {
        if(listOfTimes != nil)
            [listOfTimes release];

        listOfTimes = [[NSMutableArray alloc] init];
    }

    else if ( [elementName isEqualToString:@"start-valid-time"]) {
        currentElementType = kXMLElementTime;
        return;
    }

    else {
        currentElementType = kXMLElementOther;
    }
 //---------------------------------------------------------------------
 - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string 
    {
       if(currentElementType == kXMLElementTime)
       {
           //We don't want anymore than three times
           if ([listOfTimes count] >= 3) 
               return;

           [listOfTimes addObject:string];
       }       
    }

Он в основном хранит три «временных» элемента в массиве. Проблема, однако, заключается в том, что кажется, что он забирает пробелы в виде новой строки. Вот распечатка массива в консоли ...

Printing description of listOfTimes:
(
    "2010-08-21T22:00:00-05:00",
    "\n      ",
    "2010-08-22T01:00:00-05:00"
)

и вот фрагмент данных XML, которые я обрабатываю ...

 <time-layout time-coordinate="local" summarization="none">
      <layout-key>k-p3h-n40-1</layout-key>
      <start-valid-time>2010-08-21T22:00:00-05:00</start-valid-time>
      <start-valid-time>2010-08-22T01:00:00-05:00</start-valid-time>
      <start-valid-time>2010-08-22T04:00:00-05:00</start-valid-time>
      <start-valid-time>2010-08-22T07:00:00-05:00</start-valid-time>
      <start-valid-time>2010-08-22T10:00:00-05:00</start-valid-time>
     .
     .
     .

Неужели я неправильно понимаю, как это работает?

Заранее спасибо за вашу помощь!

7
задан BeachRunnerFred 22 August 2010 в 02:20
поделиться

1 ответ

Простым решением является создание метода didEndElement:, в котором вы задаете для currentElement значение kXMLElementOther.

Есть хорошее описание Ignorable White Space в Ignorable White Space. Проблема, вероятно, в том, что у вас нет DTD, связанного с вашим документом. Таким образом, синтаксический анализатор на самом деле не знает, что такое игнорируемое пустое пространство. (Это не просто пробел между тегами, как вы, вероятно, думаете) Таким образом, все просто обрабатывается как символьные данные.

6
ответ дан 6 December 2019 в 22:59
поделиться
Другие вопросы по тегам:

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