XML 파일을 구문 분석하는 iOS 4 응용 프로그램을 개발 중입니다. XML의 조각은 다음과 같습니다 n으로 NSXMLParser 이상한 동작
<?xml version="1.0" encoding="utf-8" ?>
<cards>
<card id ="0">
<name lang="es">The Mad</name>
<description lang="es">...</description>
</card>
...
</cards>
내가
<name lang="es">The Mad</name>
을 분석하기 위해 다음과 같은 방법을 사용합니다.
\n\nThe Mad
방법이 두 가지를 피할 수있다 '\ n'을 :
#pragma mark -
#pragma mark NSXMLParserDelegate methods
- (void)parser:(NSXMLParser *)parser
didStartElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName
attributes:(NSDictionary *)attributeDict
{
NSLog(@"DidStartElement: %@", elementName);
if ([elementName isEqualToString:@"card"])
{
currentCard = [[Card alloc] init];
NSString* arcaneNumber = [attributeDict objectForKey:@"id"];
currentCard.Number = arcaneNumber;
return;
}
if ([elementName isEqualToString:@"name"])
{
if ([[attributeDict objectForKey:@"lang"] isEqualToString:userLanguage])
{
currentProperty = kNameProperty;
return;
}
}
if ([elementName isEqualToString:@"description"])
{
if ([[attributeDict objectForKey:@"lang"] isEqualToString:userLanguage])
{
currentProperty = kDescriptionProperty;
return;
}
}
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
if (!currentStringValue)
{
// currentStringValue is an NSMutableString instance variable
currentStringValue = [[NSMutableString alloc] initWithCapacity:50];
}
[currentStringValue appendString:string];
}
- (void) parser:(NSXMLParser *)parser
didEndElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName
{
NSLog(@"DidEndElement: %@", elementName);
if ([elementName isEqualToString:@"card"])
{
[cards setObject:currentCard forKey:currentCard.Number];
[currentCard release];
currentCard = nil;
return;
}
if (currentProperty == kNameProperty)
{
currentProperty = kNoneProperty;
currentCard.Name = [currentStringValue stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
[currentStringValue release];
currentStringValue = nil;
return;
}
if (currentProperty == kDescriptionProperty)
{
currentProperty = kNoneProperty;
currentCard.Description = currentStringValue;
[currentStringValue release];
currentStringValue = nil;
return;
}
}
후, 구문 분석, 나는 다음과 같은 currentStringValue에 얻을? 왜 내가이 두 가지를 '\ n'얻는거야?
이 xml 파일은 Windows 시스템에서 가져온 것입니다. 그리고 TextWrangler를 사용하여 Classic Mac 형식으로 변환했습니다.
didStartElement 및 didEndElement 구현을 표시 할 수 있습니까? – Anna
방금 추가했습니다. – VansFannel
이 파서에 입력하는 XML 문자열을 어떻게 작성하고 있습니까? 파싱하기 전에 개행 문자를 입력 XML에서 실제 '\' 'n'문자로 변환하는 작업을 수행하고있을 가능성이 있습니까? –