我正在尝试解析xml文件(下面的链接)以获取所有带有标签的文本。我能够做到这一点,但解析器忽略了一个以短划线( - )结尾的行,并将其替换为短划线(参见下面的示例),并且一些带有谈话标记的谈话标记最终会出现在新的空白处线。是什么导致这种情况(即文本编码问题?,错误地解析)。
这是文件:
http://www.perseus.tufts.edu/hopper/xmlchunk?doc=Perseus%3Atext%3A1999.02.0055%3Abook%3D1
我使用这样的代码来获取内容:
- (void) parser:(NSXMLParser *)parser didEndElement:(NSString *)elementname namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
if ([elementname isEqualToString:@"l"]) {
NSString *textSoFar = [[NSUserDefaults standardUserDefaults] stringForKey:@"litText"];
textSoFar = [[NSString alloc] initWithFormat:@"%@\n%@", textSoFar, currentNodeContent];
[[NSUserDefaults standardUserDefaults] setObject:textSoFar forKey:@"litText"];
}
}
问题行的一个例子就在附近,它应该是:
Id metuens, veterisque memor Saturnia belli,
prima quod ad Troiam pro caris gesserat Argis—
necdum etiam causae irarum saevique dolores
但它即将出现:
Id metuens, veterisque memor Saturnia belli,
—
necdum etiam causae irarum saevique dolores
如果您需要更多帮助来理解我的问题,请告诉我,感谢您的帮助。
另外,这是我的解析器:找到字符代码,我注释掉currentNodeContent但它仍然不起作用。:
- (void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
//currentNodeContent = (NSMutableString *) [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
}
答案 0 :(得分:2)
在您的foundCharacters方法中您可能设置了currentNodeContent。你应该追加它,因为每个节点可以多次调用它。
另请参阅此问题:NSXMLParser retrieving wrong data from XML tags
你应该有这样的东西:
在您的didStartElement函数中:
currentNodeContent = [[NSMutableString alloc] init];
在你的foundCharacters函数中:
[currentNodeContent appendString:string];
然后它会起作用