Ios NSXMLParser \n和\t位于文本内部
我有以下XML体系结构:Ios NSXMLParser \n和\t位于文本内部,ios,objective-c,arrays,xml,nsxmlparser,Ios,Objective C,Arrays,Xml,Nsxmlparser,我有以下XML体系结构: <resources> <string-array name="enl"> <item> </item> <item> </item> <item>"TextTextTextTextTextTextTextTextTextTextText. Text Text Textv Text Text Text
<resources>
<string-array name="enl">
<item> </item>
<item> </item>
<item>"TextTextTextTextTextTextTextTextTextTextText.
Text Text Textv Text Text Text Text Text Text Text.
TextTextTextTextTextTextTextTextTextTextTextTextTextTextTextTextText.
TextTextTextTextTextTextTextTextTextTextText"</item>
我能做什么?这是因为您误解了解析器处理字符输入的方式:在
didStartElement:
调用和didEndElement:
调用之间,每个字符条目可以得到多个foundCharacters:
回调。您的代码假定只有一个调用,因为您立即添加了对象:
[leftArray addObject:string];
或
您应该做的是设置一个可变字符串buf
,并将foundCharacters:
中的string
参数的内容附加到该字符串中。对addObject:
的调用只能发生在需要编写的didEndElement:
方法中
您还需要执行一些最小的缓冲区管理:
didStartElement:
和didEndElement:
调用应清除buf
,以避免其他元素中不需要的字符与实际内容混在一起。非常感谢您。。我以为我明白了,但似乎我完全弄错了,非常感谢,它就像一个符咒!
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict
{
// currentElement = elementName ;
//[elementName release];
//elementName = nil;
// if ( [elementName isEqualToString:@"eng"] ) {
NSString *color = [attributeDict objectForKey:@"name"];
// NSString *value = [attributeDict valueForKey:@"left"];
if([color isEqualToString:@"enl"]){
//NSLog(@"The data in the left pane is %@", value );
Dir = @"left";
}
else if([color isEqualToString:@"enr"]){
Dir = @"right";
}
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
NSString *tagName = @"resources";
if([tagName isEqualToString:@"resources"])
{
if([Dir isEqualToString:@"left"]){
if(![string isEqualToString:@"\n"] && ![string isEqualToString:@"\n "] && ![string isEqualToString:@"\""] && ![string isEqualToString:@"\n \""] && ![string isEqualToString:@"\n\t\t"] )
[leftArray addObject:string];
} else {
if([Dir isEqualToString:@"right"]){
if(![string isEqualToString:@"\n"] && ![string isEqualToString:@"\n "] && ![string isEqualToString:@"\""] && ![string isEqualToString:@"\n \""] && ![string isEqualToString:@"\n\t\t"] )
[rightArray addObject:string];
}
}
}
}
[leftArray addObject:string];
[rightArray addObject:string];