1

所以我松散地按照本教程将 HTML 解析为 Master/Detail 应用程序。

我正在尝试将 NSArray 更改为 NSString,但唯一的数组元素(只有一个元素)似乎没有被完全解析。

我的代码:

视图控制器.h:

#import <UIKit/UIKit.h>

@interface viciViewController : UIViewController {
    IBOutlet UITextView *label;
    IBOutlet UITextField *textfield;
    IBOutlet UITextView *translation;
    IBOutlet UIButton *transButton;
    BOOL connectedToInternet;
}

-(IBAction)translateButton;

@end

视图控制器.m:

#import "viciViewController.h"
#import "TFHpple.h"

@interface viciViewController ()

@end

@implementation viciViewController

- (BOOL)connectedToInternet
{
    NSURL *url=[NSURL URLWithString:@"http://www.google.com"];
    NSMutableURLRequest *request=[NSMutableURLRequest requestWithURL:url];
    [request setHTTPMethod:@"HEAD"];
    NSHTTPURLResponse *response;
    [NSURLConnection sendSynchronousRequest:request returningResponse:&response error: NULL];

    return ([response statusCode]==200)?YES:NO;
}

-(IBAction)translateButton {
    if ([self connectedToInternet] == NO)
    {
        translation.text = @"Sorry, you need an internet connection to translate.";
        // Not connected to the internet
    }
    else
    {
        // Connected to the internet

    [textfield resignFirstResponder];
    NSString *toTranslate = self->textfield.text;
    NSString *url = [NSString stringWithFormat:@"http://www.archives.nd.edu/cgi-bin/wordz.pl?keyword=%@", toTranslate];
    NSURL *translationUrl = [NSURL URLWithString:(url)];
    NSData *translationHtmlData = [NSData dataWithContentsOfURL:translationUrl];


    TFHpple *translationParser = [TFHpple hppleWithHTMLData:translationHtmlData];

    // 3
    NSString *translationXpathQueryString = @"/html/body/pre";
    NSArray *translationOutput = [translationParser searchWithXPathQuery:translationXpathQueryString];

    NSString * result = [[translationOutput valueForKey:@"description"] componentsJoinedByString:@""];
NSLog(@"Response %@", result);
}

控制台中的日志说:

Response {
    nodeChildArray =     (
                {
            nodeContent = "\nsemper               ADV    POS                         \nsemper  ADV   [XXXAX]  \nalways;\n\n";
            nodeName = text;
        }
    );
    nodeName = pre;
    raw = "<pre>\nsemper               ADV    POS                         \nsemper  ADV   [XXXAX]  \nalways;\n\n</pre>";
}

所以,问题:是否可以将nodeContent作为 NSString 并将其\n转换为回车符?

感谢所有的帮助!

4

2 回答 2

1

TFHppleElement正是这样做的:

替换代码中的以下行

NSString * result = [[translationOutput valueForKey:@"description"] componentsJoinedByString:@""];
NSLog(@"Response %@", result);

具有以下内容:

NSString *translatedString = ((TFHppleElement *)translationOutput[0]).firstChild.content;
NSLog(@"%@", translatedString);

不要忘记包括TFHppleElement.h


输出

如果您发送semper存储在的解析结果translatedString

semper ADV POS
semper ADV [XXXAX]
总是;

于 2013-06-21T12:55:31.047 回答
0

所以你有一本字典,向它询问 nodeChildArray 对象,向该数组询问其第一个对象,向该字典询问其节点内容。现在你有一个字符串。使用 NSString 方法分解一个给定子字符串(@"\n",两个反斜杠)的字符串,现在你得到一个字符串数组。遍历所有内容,再次使用字符串方法删除前导和尾随空格。如果字符串有长度,您可以再次获取由空格分隔的字符串数组或使用 NSScanner 来完成。

于 2013-06-21T12:21:00.687 回答