2010-04-23 55 views
0

我解析这一行:我需要帮助调试我的XML解析,请

<type>branch</type>

与此代码在didEndElement

if ([elementName isEqualToString:@"type"]) { 

     [currentBranchDictionary setValue:currentText forKey:currentElementName]; 

    } 

当我在type键测试值,它不包含branch,但它包含branch\n。下面是我进行的测试:

if ([[currentBranchDictionary valueForKey:@"type"] isEqualToString:@"branch"]) { 
     NSLog(@"no new-line"); 
    } else if ([[currentBranchDictionary valueForKey:@"type"] isEqualToString:@"branch\n"]) { 
     NSLog(@"new-line"); 
    } 

这将返回“新线”输出

这里的foundCharacters方法:

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string { 
    [currentText appendString:string]; 
} 

我不明白的地方回车正在添加,任何人都可以帮忙吗?

+0

什么方法是第一个代码片段?显示foundCharacters方法。 currentText被设置或修改的其他地方是什么? – DyingCactus 2010-04-23 22:05:52

+0

第一个代码片段位于didEndElement中。我会发布找到的字符方法,谢谢。 – conorgriffin 2010-04-23 22:08:00

+0

我也做'currentText = [NSMutableString string];'在'didStartElement'中 – conorgriffin 2010-04-23 22:15:26

回答

1

我怀疑你的XML包含回车(“\ r”),这些回车没有被你的编辑器显示出来。 XML规范要求这些被翻译成换行的结果报告给您的应用程序之前,(“\ n”):

http://www.w3.org/TR/REC-xml/#sec-line-ends

可以验证XML文件的内容? xxd命令的输出是什么?这是我创建的文件的输出。请注意多余的0d字符:

0000000: 3c74 7970 653e 6272 616e 6368 0d3c 2f74 <type>branch.</t 
0000010: 7970 653e        ype> 
+0

嗨bkail,我手工输入了包含'分支'的行,没有回车。如果在将其内容放入字典之前输出'currentText',它将不会回车。如果在设置后立即输出'valueForKey:@“类型”',它没有回车。但是,如果我在离开'didEndElement'后输出'valueForKey:@“类型的'',它确实有回车符。我不明白为什么。 – conorgriffin 2010-04-24 22:32:14

+0

我发现了这个问题。 '\ r'在关闭的元素之后,例如'分支 \ r'。这意味着我正在关闭元素,调用'didEndElement'来输出'currentText',这将包含'branch'。然而,那么''foundCharacters'将被调用到行尾的'\ r'。这会将'\ r'追加到'currentText',它的值由'[currentBranchDictionary valueForKey:@“type”]'指向。 QED – conorgriffin 2010-04-24 23:37:25