【发布时间】:2012-01-19 12:52:15
【问题描述】:
我正在开发一个解析 XML 文件的 iOS 4 应用程序。一段XML是:
<?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>。
#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\nThe Mad
如何避免这两个'\n'?为什么我得到这两个'\n'?
这个 xml 文件来自 Windows 系统,我使用 TextWrangler 将其转换为 Classic Mac 格式。
【问题讨论】:
-
你能展示你对 didStartElement 和 didEndElement 的实现吗?
-
您是如何创建输入此解析器的 XML 字符串的?您是否有可能在解析之前将输入 XML 中的换行符转换为实际的 '\' 'n' 字符?
-
我所有的代码都在这里。我遵循了本指南:developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/…
标签: ios xml nsxmlparser file-format