在我的应用中,我想显示一个包含新闻的字符串。这个字符串只是从一个免费的网站加载,所以网站的普通源代码不仅包含我的字符串,它更像是这样的:
Stuff
More Stuff
More HTML Stuff
My String
More HTML Stuff
Final Stuff
当然我想切断我在NSString中不想要的所有html内容。由于我要及时更改String fron,因此网站源代码的总长度会发生变化。这意味着substringFromIndex
无法正常工作。有没有其他方法可以将完整的源代码转换为我需要的字符串?
答案 0 :(得分:2)
有数以万计的方法来操纵文本。我会从正则表达式开始。如果您提供有关问题细节的更多详细信息,可以获得更具体的帮助。
修改强>
感谢您访问该网站的链接。这让我有更多的工作。如果你总是知道你想要的div的id,你可以使用NSXMLParser来提取div的文本。这会将NSTextField的文本设置为id为“I3_sys_txt”的div的内容。我在Mac上做过这个,但我相信它也适用于iPhone。
-(IBAction)buttonPressed:(id)sender {
captureCharacters = NO;
NSURL *theURL = [NSURL URLWithString:@"http://maxnerios.yolasite.com/"];
NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:theURL];
[parser setDelegate:self];
[parser parse];
[parser release];
}
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict {
if ([elementName isEqual:@"div"] && [[attributeDict objectForKey:@"id"] isEqual:@"I3_sys_txt"]) {
captureCharacters = YES;
divCharacters = [[NSMutableString alloc] initWithCapacity:500];
}
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
if (captureCharacters) {
//from parser:foundCharacters: docs:
//The parser object may send the delegate several parser:foundCharacters: messages to report the characters of an element.
//Because string may be only part of the total character content for the current element, you should append it to the current
//accumulation of characters until the element changes.
[divCharacters appendString:string];
}
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
if (captureCharacters) {
captureCharacters = NO;
[textField setStringValue:divCharacters];
[divCharacters release];
}
}
答案 1 :(得分:0)
以下是您需要使用的NSRegularExpression类:NSRegularExpression
以下是关于如何使用课程的“开始”教程:Tutorial
以下是正则表达式的基础:Regex Primer
这是一个在线正则表达式测试器:Tester
测试人员可能无法完全像NSRegularExpression那样工作,但它可以帮助您理解一般的正则表达式定义。正则表达式对于软件开发人员来说是一个关键工具,起初有点令人生畏,但在搜索或操作字符串时它们可以起到很好的作用。
虽然这看起来很多工作 - 但你没有尝试过“快速回答”。你说“有没有其他方法可以将完整的源代码转换为我需要的字符串?” - 答案是肯定的 - 正则表达式。但你需要定义“我需要的字符串”的意思,正则表达式是一种重要的方式。