【问题标题】:Why is NSXMLParser picking up this whitespace in the foundCharacters method?为什么 NSXMLParser 在 foundCharacters 方法中拾取这个空格?
【发布时间】:2011-04-02 04:09:58
【问题描述】:

我正在学习在 iOS 平台上使用 NSXMLParser API,到目前为止它非常易于使用。但是,我在 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 数据的 sn-p...

 <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>
     .
     .
     .

我是否误解了它的工作原理?

提前感谢您的帮助!

【问题讨论】:

    标签: iphone ipad ios nsxmlparser


    【解决方案1】:

    简单的解决方案是创建一个didEndElement: 方法,将currentElement 设置为kXMLElementOther

    Ignorable White Space 上有一个很好的Ignorable White Space 描述。问题可能是您没有与文档关联的 DTD。所以解析器实际上并不知道什么是可忽略的空白。 (这不仅仅是标签之间的空白,这可能是您的想法)所以它只是将所有内容都视为字符数据。

    【讨论】:

      【解决方案2】:
      - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
      {
          //whatever data i am getting from node i am appending it to the nodecontent variable
          [nodecontent appendString:[string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]];
          NSLog(@"node content = %@",nodecontent);
      }
      

      【讨论】:

        【解决方案3】:

        我在下面的代码中找到了您问题的答案并进行了编辑

        - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string 
        

        添加这行代码

        NSString *stringToDisplay = [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
        

        现在用“stringToDisplay”回复你在上面提到的函数中找到“string”的地方

        它对我有用。希望它也对你有用。 享受编码。

        【讨论】:

          猜你喜欢
          • 2017-03-27
          • 1970-01-01
          • 2014-09-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多