1

Hpple ラッパーを使用して、Web サイトからテーブル ビューにデータを取得しようとしています: https://github.com/topfunky/hpple

私が見るウェブサイトのソースコード(これは関連部分です):

<div id="traffic_content">
                <marquee width="412" height="21" direction="right" scrollamount="3">
                    <a href="/Site/Traffic.aspx" id="ctl00_TrafficHolder">מעודכן לשעה: 16:40&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;בכביש תל אביב חיפה הישן, עומס תנועה ממחלף כפר סבא רעננה צפון עד מחלף הדרים, בגלל תנאונת דרכים.&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;כביש מספר 70 עמוס מצומת אבליים עד צומת יבור.&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;איילון דרום עמוס ממחלף רוקח עד מחלף לה גווארדיה. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;איילון צפון עמוס ממחלף חולון עד מחלף גלילות מזרח.  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;***&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;שימו לב, בעלי זכות בחירה אשר יימצאו ביום הבחירות בישוב המרוחק למעלה מ-20 קילומטר מתחום השיפוט של הישוב בו ממוקם הקלפי בו הם אמורים להצביע, זכאים לנסיעה חינם בתחבורה הציבורית &#40;אוטובוסים והרכבת&#41;.יש להציג תעודה מזהה ואת ההודעה לבוחר.&#40;ממשו את זכותכם להצביע&#41;.&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;למסירת ולקבלת דיווחים ותזמונים חייגו: 918 - 800 - 1-800&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;בנסיעה בקרבת בתי ספר, גינות משחקים ומתנ&quot;סים – יש להוריד מהירות, גם כשהכביש פנוי. בהגיעכם למעבר חצייה – אפשרו תמיד חצייה לילד המבקש לחצות. היו דרוכים, ערניים ומרוכזים, וחפשו אתם את הילדים העשויים להתפרץ לכביש.&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;עורך דיווחי התנועה:בני כבודי</a>
                </marquee>
            </div>

内部のコンテンツをテーブルビューにすることに興味があります。

だから私は試しました:

NSURL *trafficUrl = [NSURL URLWithString:@"http://www.glgltz.co.il/Site/Traffic.aspx"];
NSData *trafficHtmlData = [NSData dataWithContentsOfURL:trafficUrl];

TFHpple *trafficParser = [TFHpple hppleWithHTMLData:trafficHtmlData];

NSString *trafficXpathQueryString = @"//div[@id='traffic_content']/a";
NSArray *trafficNodes = [trafficParser searchWithXPathQuery:trafficXpathQueryString];

NSMutableArray *newTraffic = [[NSMutableArray alloc] initWithCapacity:0];
for (TFHppleElement *element in trafficNodes){
    Traffic *traffic = [[Traffic alloc] init];
    [newTraffic addObject:traffic];
    traffic.name = [[element firstChild] content];
}

それをテーブル ビューの NSArray にロードします。

コードをデバッグすると、trafficNodes に 0 個のオブジェクトがあることがわかります。

このデータを正しく取得するにはどうすればよいですか?

4

1 に答える 1

1

XPath のタグを忘れました ;) NSArray がないため、空です"div[@id='traffic_content']/a"

次のように変更してみてください。

@"//div[@id='traffic_content']/marquee/a"

次のコードでダウンロードしてみましたが、すべて動作しているようです ;)

    //EDIT: //After converting trafficHtmlData the both the label and NSLog() show correct hebrew letters
    NSData *trafficHtmlData = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://www.glgltz.co.il/Site/Traffic.aspx"]];
    NSString *trafficHTMLDataString = [[NSString alloc] initWithData:trafficHtmlData encoding:NSUTF8StringEncoding];
    NSData *newData = [trafficHTMLDataString dataUsingEncoding:CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingWindowsHebrew)];
    if (trafficHtmlData != nil) {
        TFHpple *trafficParser = [TFHpple hppleWithHTMLData:trafficHtmlData];
        NSArray *trafficNodes = [trafficParser searchWithXPathQuery:@"//div[@id='traffic_content']/marquee/a"];
        TFHppleElement *element = trafficNodes[0];
        //EDIT: Convert the first element in trafficNodes   
        NSString *string = [element content];   
        [self.label setStringValue:string];
        NSLog(@"%@", string);

        /*
        NSMutableArray *newTraffic = [[NSMutableArray alloc] initWithCapacity:0];
         for (TFHppleElement *element in trafficNodes){
            Traffic *traffic = [[Traffic alloc] init];
            traffic.name = [[element firstChild] content];
            [newTraffic addObject:traffic];
         }
         */
    }
于 2013-01-21T18:24:56.770 に答える