gpt4 book ai didi

objective-c - 简单简洁的桌面Cocoa NSXMLParser例子?

转载 作者:行者123 更新时间:2023-12-03 16:55:19 25 4
gpt4 key购买 nike

我想查看文件的元素,当出现一个特定元素时,输出标记之间的内容。

我尝试遵循 Mac Dev 中标题为 Event Driven XML Programming 的示例,但它只是没有完成得很清楚。它说要确保我对代表进行编码,但它从未显示示例。我只想看一个简单的例子:

  • 假定该文件是一个好的 xml 文件。
  • 其路径是 URL(或字符串)。
  • 解释了委托(delegate)与解析器交互的方式。

许多 Cocoa 教程似乎几乎都是教你绕过委托(delegate)类并创建自己的 IBAction 函数,所以我错过了我认为如何正确使用委托(delegate)的培训。在示例中不清楚我是否应该在委托(delegate)类中构建委托(delegate),或者将它们保留在带有解析器的类中。

最佳答案

这是基于我最初为 Cut out a part of a long NSString 撰写的内容。我将 NSXMLParserDelegate 代码从该 iOS 项目复制到 OS X 项目中。它从网页中的特定对象获取文本。

.h 文件:

@interface so7576593AppDelegate : NSObject <NSApplicationDelegate, NSXMLParserDelegate> {
NSWindow *window;
IBOutlet NSTextField *textField;

NSMutableString *divCharacters;
BOOL captureCharacters;
}

@property (assign) IBOutlet NSWindow *window;

@end

.m 文件:

#import "so7576593AppDelegate.h"

@implementation so7576593AppDelegate

@synthesize window;

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
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];
}
}

@end

关于objective-c - 简单简洁的桌面Cocoa NSXMLParser例子?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7576593/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com