0

XML ファイルを適切に解析するために TBXML を使用して他のいくつかのメソッドをコーディングしたため、これには完全に困惑しています。以下、問題の方法です。何を試してもルート要素は null のままであるため、残りのメソッドは失敗します。ご覧のとおり、XML ファイルは Web 上にあり、PHP 経由で出力されます。このまったく同じ方法を別のアプリケーションで使用しましたが、まったく問題はありませんでした。XML 出力を以前に使用したものと比較しましたが、要素以外に違いはありません。このメソッドのコードはほとんど同じですが、何か不足しているに違いありません。どんな助けでも大歓迎です。

- (void)loadFromZenPhoto{
tbxml = [[TBXML alloc] initWithURL:[NSURL URLWithString:@"http://www.flpublicarchaeology.org/civilwar/generatexml.php"]];    

// Obtain root element
TBXMLElement *root = tbxml.rootXMLElement;

// if root element is valid
if (root) {
    TBXMLElement *site = [TBXML childElementNamed:@"site" parentElement:root];

    // if a site element was found, create site object
    while (site != nil) {

        Site *aSite = [[Site alloc] init];

        TBXMLElement *siteid = [TBXML childElementNamed:@"id" parentElement:site];
        if (siteid != nil)
            aSite.siteid = [[TBXML textForElement:siteid] intValue];

        TBXMLElement *parentid = [TBXML childElementNamed:@"parentid" parentElement:site];
        if (parentid != nil)
            aSite.parentid = [[TBXML textForElement:parentid] intValue];

        TBXMLElement *folder = [TBXML childElementNamed:@"folder" parentElement:site];
        if (folder != nil)
            aSite.folder = [TBXML textForElement:folder];

        TBXMLElement *title = [TBXML childElementNamed:@"title" parentElement:site];
        if (title != nil)
            aSite.title = [TBXML textForElement:title];        


        // add site object to the sites array
        [sites addObject:aSite];

        //advance to next sibling
        site = [TBXML nextSiblingNamed:@"site" searchFromElement:site];
    }           
}
}
4

2 に答える 2

0

うーん、これはトリッキーでした。Web サービスが ASCII エンコードされた html を返しているようです。一方、TBXML は UTF8 エンコーディングを想定しています。

これで確認してみてください

NSLog(@"stringLoad: %@", [NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://www.flpublicarchaeology.org/civilwar/generatexml.php"] encoding:NSUTF8StringEncoding error:nil]);

としてコンソールに記録しstringLoad: (null)ますが、使用する場合NSLog(@"stringLoad: %@", [NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://www.flpublicarchaeology.org/civilwar/generatexml.php"] encoding:NSASCIIEncoding error:nil]);

コンソールは正しい html 応答をログに記録します。

お役に立てれば。

于 2012-01-05T20:52:31.890 に答える
0

わかりました、あなたは私が以前に抱えていたのと同じ問題に直面していると思います. 問題は、XCode の提案によって TBXML.m のセマンティックの問題を修正したことだと思います。詳細については、この回答をご覧ください。

于 2012-01-11T21:28:14.523 に答える